对于getchar()在从空文件中管道传输时如何与stdin进行交互感到困惑。
下面是简单的c代码test_program.c
#include <stdio.h>
int main( ) {
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
return 0;
}奇怪的是当我把一个空文件传送到stdin时会发生什么.
$ cat a | ./test_program
Enter a value :
You entered: �
Enter a value :
You entered: �我想我会期望test_program阻止它,直到我真正地为它提供数据。为什么它从stdin中读取文件a是空的,为什么它也打印垃圾?
发布于 2019-10-25 11:14:37
这个片段解释得很好。
#include <stdio.h>
int main(void)
{
int c = getchar( );
if(c == EOF)
printf("EOF\n");
},我想我本来希望test_program会阻止它,直到我真正地为它提供数据。为什么它从stdin中读取文件a是空的,为什么它也打印垃圾?
当您(尝试)从空流读取数据时,您将得到EOF。所以你才知道溪流是空的。
https://stackoverflow.com/questions/58557385
复制相似问题