Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2011, 09:46   #11
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

А я решил не создавать стопицот тем и продолжить здесь

Код:
#include <stdio.h>


/ подсчёт символов во входном потоке/

main()
{
    long nc;
    
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
    
}






main()
{
    double nc;
    
    for (nc = 0; getchar() != EOF; ++nc);
    printf("%.0f\n", nc);
}

^ не выводит число nc ^


Код:
#include <stdio.h>

/ подсчёт строк во входном потоке /

main()
{
	int c, nl;
	nl = 0;
	while ((c = getchar()) != EOF)
	if (c == '\n')
	++nl;
	printf("%d\n", nl);
}
не выводит значение nl
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Старый 09.08.2011, 10:37   #12
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Написал демонстрационную программку:
Код:
#include <stdio.h>
#include <locale.h>
#include <conio.h>

/* подсчёт символов во входном потоке */
int main() {
    setlocale(LC_ALL, "Russian");

    printf("Подсчёт символов во входном потоке:\n\n");

    printf("Введите символы, нажмимая  после ввода строки - ENTER. По окончанию \
ввода строк нажмите CTRL+Z -> отпустите -> нажимте ENTER:\n");
    long nc = 0;
    while (getchar() != EOF) {
        ++nc;
    }
    printf("\nКоличество введёных символов = %ld\n", nc);

    _getch();
    return 0;
}

Последний раз редактировалось 8Observer8; 09.08.2011 в 10:55.
8Observer8 вне форума Ответить с цитированием
Старый 10.08.2011, 08:20   #13
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

ваще не понятно, почему такие задачи пишут в учебниках. Вроде как должно быть правильно, но толи компилятор такой толи х з..
спасибо за пример программы, я попробую но ещё не известно может таких файлов у меня нет.
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Старый 10.08.2011, 08:51   #14
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

_getch() не пишите. Меня самого за это отругали, вот:
Цитата:
Сообщение от Blade Посмотреть сообщение
Зачем вообще этот бред нужен? Нормальные люди консольные программы запускают из консоли, либо лог пишется в файл.
Если программа запускается из среды, то в конце ставится breakpoint, чтобы посмотреть нужные значения
Если Вы используете Visual C++, то запускайте программу с помощью Ctrl+F5.

Так что Ваша программа подсчёта символов замечательно работает:
Код:
#include <stdio.h>

/* подсчёт символов во входном потоке */
int main() {
    long nc;
    
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("nc = %ld\n", nc);

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 10.08.2011, 09:10   #15
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

я использую нэтбианс и программа не очень хорошо работает.
ввожу символы, нажимаю энтэр, перевод строки и опять можно вводить символы и так до бесконечности, а кол-во символов так и не показывает
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Старый 10.08.2011, 09:28   #16
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

нажмите CTRL+Z -> отпустите -> нажимте ENTER. Это для завершения ввода. Вы можете ввести, например:

0123456789
123
1234567
>>>нажмите CTRL+Z -> отпустите -> нажимте ENTER<<<
nc = 23

Последний раз редактировалось 8Observer8; 10.08.2011 в 09:32.
8Observer8 вне форума Ответить с цитированием
Старый 10.08.2011, 09:58   #17
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Запускать исполняемый файл нужно так:
- Пуск -> Выполнить -> вводим: cmd -> Ok
- Пишем путь к исполняемому файлу, в виде:
"путь" имя.exe
- перенаправляем вывод в текстовый файл, дописывая:
"путь" имя.exe > result.txt
- нажимаем ENTER
- вводим строку:
0123456789
- нажимаем ENTER
- вводим вторую строку:
123
- нажимаем ENTER
- вводим третью строку:
1234567
- нажимаем ENTER
- нажимаем CTRL+Z
- нажимаем ENTER
- открываем result.txt. Там nc = 23

Если у Вас есть какой-нибудь файловый менеджер, например: Far или Tolal Commander. То можно открыть директорию с исполняемым файлом и в командной сроке ввести просто: имя.exe > result.txt (путь не надо вводить). Далее шаги те же самые, что и выше, начиная ПОСЛЕ строки:
- перенаправляем вывод в текстовый файл, дописывая:
"путь" имя.exe > result.txt
8Observer8 вне форума Ответить с цитированием
Старый 10.08.2011, 11:16   #18
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

вроде работает, про контрл зэд в книжке ничё не сказано =).
только почему-то выдаёт на 1 символ больше чем есть
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Старый 10.08.2011, 12:04   #19
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вы скорее всего ввели, к примеру:

12345

Нажали ENTER ... и получили:

nc = 6

Это правильный результат, так как строка заканчивается символом перевода строки '\n' равному коду 10d (десятичная система)
8Observer8 вне форума Ответить с цитированием
Старый 12.08.2011, 10:07   #20
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

почему программа не работает?
должна определять символы пробел, таб и конец строки во входящем потоке и выводить слова столбиком

Код:
#include <stdio.h>
#include <stdlib.h>

/*
 * 
 */

#define IN 1            /* внутри слова */
#define OUT 0           /* снаружи слова */

/* вывод входного потока по одному слову в строке */
main()
{
    int c, nl, nw, nc, state;
    
    state = OUT;
    nl = nw = nc =0;
    while ((c = getchar()) != EOF) {
        ++nc;
        if (c == '' || c == '\n' || c == '\t')
            state = OUT;
                else if (state == OUT) {
            state = IN;
            ++nw "\n";
        }
    }
    printf("%d %d %d\n %d", nl, nw, nc, c);
}
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц