Getchar () не работает? - PullRequest
       3

Getchar () не работает?

1 голос
/ 09 сентября 2011

Меня смутила функция getchar () , поэтому я искал этот замечательный веб-сайт, прочитал все относящиеся к нему темы и прочитал о getchar () в книге K & R. Но когда я запустил код, набрал слово на экране консоли и нажал Enter, ничего не произошло. Я ожидал, что количество символов будет отображаться.

#include<stdio.h>
int main(void)//doesn't work??
{
int c ;
int count ;

while ( ( c = getchar() ) != EOF )
   count ++ ;

printf( "%d characters\n" , count ) ;
return 0;
}

Ответы [ 4 ]

7 голосов
/ 09 сентября 2011

Я думаю, это потому, что вы нажимаете Enter и ожидаете остановки цикла.

Состояние

while ( ( c = getchar() ) != EOF)

будет ложным в Windows только при нажатии Ctrl + Z.

В UNIX это Ctrl + D Я думаю, поэтому должно быть Ctrl + D, если вы используете Ubuntu.

Если вы хотите, чтобы цикл останавливался при нажатии клавиши ввода, попробуйте вместо этого проверить наличие символа '\n'.

2 голосов
/ 09 сентября 2011

Либо замените EOF на '\ n', либо отправьте EOF с помощью Ctrl + D в Unix-подобных системах (или Ctrl + Z в Windows, как упоминалось другими). ​​

Редактировать: И count неверно, потому что вы не инициализировали переменную равной 0. Значение неинициализированной переменной будет неопределенным, и ваш компилятор должен предупредить вас об этом.

2 голосов
/ 09 сентября 2011

Если вы используете Windows, ENTER не соответствует EOF.Этот вопрос может объяснить это для вас:

Почему getchar () не распознает return как EOF на консоли?

0 голосов
/ 09 сентября 2011

EOF означает конец файла, но вы не открыли какой-либо файл, поэтому как вы ожидаете, что он будет работать?

int main (void) \\ no problem using these . it just says no arguments to main

пример

int main(  )
 {
   int a=40; 
   main(a); \\ you wont find any error with these
 }

int main( void )
 {
     int a=40;
     main(a);  \\ you get error saying main function cant take arguments
  }

main( ) it can take infinite arguments and whereas main(void) none arguments

Вот почему при использовании

getch(a) or clrscr(1) your passing arguments to these functions so you get error
                       because they are defined as clrscr( void ) getch (void )

strlen(char *)  \\ can take only one argument 

Вы можете проверить их в заголовочных файлах

  Try these
  c = 0; count = 0 ; initialize it so that you wont have any garbage value
  while ((c=getchar)!='\n') or may be its AScll value 
  while ((c=getchar)!=13)

  FILE *p;
  p=fopen("hello.txt","r");
  while ( c = getc(p) != EOF ) \  When  it returns end of file while loop exits

 Say You have these content in hello.txt 
 "hello world My name text file"
 for every loop c has the character like h,e,l and when it returns to end it exits

Так что EOF в основном используется с файлами. Надеюсь, вы поняли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...