Ввод не завершается в c, поэтому вывод не работает

#c #input #output #eof

#c #ввод #вывод #eof

Вопрос:

Я только изучаю c, и я использую Linux terminal. Я написал следующий простой код, но когда я набираю входные данные, файл не завершается и, следовательно, не подсчитывает количество символов. Кто-нибудь может мне с этим помочь? Я пробовал и другие коды ввода. То же самое со всеми моими кодами, связанными с вводом. Что я делаю не так? Пожалуйста, помогите.

 main()
{    
    /* count characters in input */    
    printf("Type some characters and the program will count the number of characters: ");

    int c = getchar();

    while(c!=EOF amp;amp; c!= 'n')    
          c;

    printf("Number of characters typed: n", c);    
}
  

Комментарии:

1. Вы читаете только один символ, поскольку вызываете getchar только один раз. Вам нужно вызывать его повторно до тех пор, пока вы не столкнетесь с EOF (или n или, может быть, с каким-либо другим вашим условием остановки while ((c=getchar()) != EOF) ?

2. Что это за функция getchar () ? Способ получения входных данных обычно осуществляется через scanf («% s», буфер), который примет входные данные и скопирует их в буфер переменной

3. @Yvain getchar — это стандартная функция, определенная в stdio.h; если OP хочет прочитать char по char, scanf («%s») на самом деле не подходит.

4. Вы также используете ту же переменную для количества символов, что и входной символ. Как это могло бы сработать?

5. Спасибо, что указали на глупую ошибку @Barmar. Я сходил с ума от этого! В конце концов, сегодня вечер пятницы! Обновленный код: #include <stdio.h> main() { int c; printf(«Введите некоторые символы: «); while(getchar()!=EOF amp;amp; getchar()!= ‘n’) c; printf(«Общее количество введенных символов = n», c); }

Ответ №1:

Итак, обратите внимание на полезные комментарии;

 #include <stdio.h>

int main(){
        int c;
        int count = 0;

        while((c=getchar()) != 'n' amp;amp; c != EOF)
                count  ;
        printf("%dn", count);
};
  

Этот код работает так, как ожидалось.

Комментарии:

1. Вы говорите, while((c=getchar()) != 'n' || c != EOF) следует ли использовать? Разве это не было бы бесконечным циклом, поскольку все символы, четные 'n' и EOF , не равны ни одному из них и будут выполнять условие всегда true .

2. Нет, этот цикл означает: «до тех пор, пока входной символ не является ни ‘newline’, ни ‘EOF'», если вы заменили or на и это означало бы «до тех пор, пока входной символ не является ‘newline’, объединенным с ‘EOF'», так что этот цикл действительно никогда не остановится.

3. Вы ошиблись, приятель. Допустим, c это 'n ‘. Ваше условие будет оценено как while('n' != 'n' || 'n' != EOF) ===> while(false || true) ===> while(true) . Теперь давайте посмотрим, c так ли EOF , while(EOF != 'n' || EOF != EOF) ===> while(true || false) ===> while(true) . Для всего остального while(true || true) . Когда закончится цикл? Я не могу поверить, что мне нужно вводить здесь оценку кода.