getchar () застрял в цикле, никогда не достигая EOF - PullRequest
0 голосов
/ 26 июня 2018
#include <stdio.h>

int main() {
    int c;
    while(getchar() != EOF) {
        if (getchar() == ' ') {
            c++;
        }
        printf("%i", c);
    }
}

Я понял, что набираешь предложение, подобное тому, которое ты читаешь правильно

Я \ nосуществил \ nthat \ n \ n \ n \ a \ n ...

Я полагаю, что так читается, getchar () не достигает EOF, чтобы сделать условие в круглых скобках ложным.

Моя цель здесь - создать программу, которая будет принимать от меня информацию .. читает это если есть пробелы он рассчитывает на счетчик когда EOF достигнут условие продолжать читать это становится ложным значение счетчика выводится на экран чтобы показать мне, сколько пробелов у меня было во всем моем входе ..

это невозможно? Вот почему люди просто используют scanf ()?

это вывод, который я получаю при попытке чего-то

user@user:/c# ./a.out
hello stackoverflow this does not do what i want it to
001111111222223344445666677

1 Ответ

0 голосов
/ 26 июня 2018

Вам нужно поместить результат getchar() в переменную:

int ch;
while ((ch = getchar()) != EOF) 

Вы не должны вызывать getchar() во второй раз, чтобы проверить, является ли это пробелом, так как он будет читать второй символ, поэтому вы будете проверять каждый второй символ, просто сравните переменную:

    if (ch == ' ')

А если вы хотите увидеть общее количество пробелов, поместите printf() в конце цикла, а не внутри него.

Так что все это должно выглядеть так:

#include <stdio.h>

int main() {
    int counter=0;
    int ch;
    while((ch = getchar()) != EOF) {
        if (ch == ' ') {
            counter++;
        }
    }
    printf("%i\n", counter);
}

Чтобы отправить EOF из терминала, введите Control-d в Unix, Control-z в Windows.

...