Я изучаю, как вводятся работы в C. Моя самая большая борьба - это понимание поведения EOF в терминале
Во-первых, я использую компилятор Windows и GCC «В случае, если это может помочь»
Во-вторых, я не пытаюсь перенаправить ввод из файла ... мой вопрос о вводе с консоли Windows
Мой вопрос:
Я прочитал, что EOF закрывает входной поток, что вы не можете читать с stdin после EOF ... Это не касается меня! Даже после того, как я вхожу в явном виде Enter-Ctrl-Z-Enter, если я сделать еще GetChar() называют это читает из стандартного ввода ... Пример:
Поведение Stdin и EOF под консолью Windows
int c = 0;
char str[100]={0};
printf("Type in a string with spaces so some chars would remain in Stdin: ");
//Let's say i type "Hello world!"
scanf("%s",str);
while((c=getchar()) != EOF)
printf("%c",c);
//it displays " World!" in console, then i type Enter-^Z-Enter
//The loop exits so far so good
printf("Let's just check if we can still read from stdin, type a char: ");
c = getchar(); //i type the letter 'a'
printf("\nYou entered: %c\n",c); //It displays 'a'?!
Кроме того, что-то странное происходит, когда вы вводите^Z в середине строки, любые символы перед тем, как он будет возвращен, но что-либо напечатано после того, как оно исчезнет! Но когда вы проверяете содержимое переменной, оно не равно -1? Вот пример:
int c = 0;
char str[100]={0};
printf("Type in a string with spaces so some chars would remain in Stdin: ");
//This time i type "Hello wor^Zld!" with ^Z in the middle of "World!"
scanf("%s",str);
while((c=getchar()) != EOF)
printf("%c",c);
//it displays " Wor->" in console, with the cursor hanging waiting for input
/*
So on the one hand, after ^Z everything disappears, but on the other
hand it's waiting for input so it's not EOF?!
*/
//In case you're wondering, here too i can call getchar() and read from stdin!
printf("Let's just check if we can still read from stdin, type a char: ");
c = getchar(); //i type the letter 'a'
printf("\nYou entered: %c\n",c); //It also displays 'a'?!
Поверь мне, я действительно пытаюсь понять, как это работает, но это действительно запутанная для новичка в C ... Так что любая помощь будет принята с благодарностью!
см https://msdn.microsoft.com/sv-se/library/xssktc6e.aspx about eof –