2016-10-22 3 views
1

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

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

    int c = getchar(); 

    while(c!=EOF && c!= '\n')  
     ++c; 

    printf("Number of characters typed: %1d\n", c);  
} 
+3

Вы только когда-либо читали один символ, как только вы называете «getchar» один раз. Вам нужно вызывать его повторно, пока вы не сталкиваетесь с 'EOF' (или' \ n', или что-то еще является вашим условием остановки, возможно 'while ((c = getchar())! = EOF)?? – jpw

+0

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

+2

@Yvain 'getchar' - стандартная функция, определенная в stdio.h, если OP хочет читать char с помощью char scanf («% s»), не подходит. – jpw

ответ

0

Поэтому, чтобы обратить внимание на полезные комментарии;

#include <stdio.h> 

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

     while((c=getchar()) != '\n' && c != EOF) 
       count++; 
     printf("%d\n", count); 
}; 

Этот код работает должным образом.

+0

Вы говорите 'while ((c = getchar())! = '\ N' || c! = EOF)' следует использовать? Разве это не будет бесконечным циклом, так как все символы, даже '' \ n'' и 'EOF', не равны ни одному из них, и сделают условие всегда« истинным ». – alvits

+0

Нет, этот цикл означает: «до тех пор, пока входной символ не будет ** ** **« новой строкой »** и **« EOF », если вы заменили или с ним, и это будет означать« пока вход не будет «новая линия» ** вместе ** с «EOF», так что это никогда не прекратится. – Yvain

+0

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

Смежные вопросы