EOF在C语言中的应用
代码:EOF在C语言中的应用,c,C,代码: #包括 main() { INTC; printf(“输入任何字符!”:”; 而((c=getchar())!=EOF){ 普查尔(c); printf(“%d\n”,(c=getchar())!=EOF); } } 我试着用C测试EOF,但我现在很难用它。我想得到EOF的值,发现它是-1 我使用getchar()和putchar()编写了一个简单的程序。 我已经添加了程序和输出的屏幕截图。输出对我来说毫无意义 如您所见,我正在尝试获取一个字符,并使用getchar()和putchar
#包括
main()
{
INTC;
printf(“输入任何字符!”:”;
而((c=getchar())!=EOF){
普查尔(c);
printf(“%d\n”,(c=getchar())!=EOF);
}
}
我试着用C测试EOF,但我现在很难用它。我想得到EOF的值,发现它是-1
我使用getchar()
和putchar()编写了一个简单的程序。
我已经添加了程序和输出的屏幕截图。输出对我来说毫无意义
如您所见,我正在尝试获取一个字符,并使用getchar()
和putchar()
显示它。我试图打印while循环中使用的条件值。为了检查EOF,我故意输入-1
putchar()
打印出-1
,然后最后的printf语句让我感到困惑。我为getchar()
输入-1
,但1
显示的意思是c不等于EOF。但我认为-1
是EOF。我不明白为什么还会显示
11
。我正在使用codeblocks
IDE。请帮帮我。提前感谢。getchar一次输入一个字符(字节)。因此,当您输入“-1”时,它被视为字符数组输入,第一个getchar只接受输入“-”,第二个getchar接受输入“1”。因此,您无法获得所需的输出。此外,putchar设计为一次打印一个字符。所以它可能也不能正常工作。您可以按照以下方式更改代码以使其正常工作
int c;
while(scanf("%d", &c)!=EOF) { //to ensure there is some input value as scanf will return EOF when input stream finishes.
printf("%d\n", c);
if(c == EOF) {
printf("c is equal to EOF\n");
break;
}
}
EOF
不是字符,也不是从流中读取的。它只是一个返回值,指示该流上没有更多的输入。您可以通过在Windows上键入CtrlD on*nix或CtrlZ来发出EOF的信号。1)请以文本形式发布代码,而不是屏幕截图。2) 在同一个循环中调用“getchar()”两次。可能不是你想要的;)输入-1
将导致getchar
返回-
的ASCII码,然后返回1
的ASCII码,这是字符和整数的混合EOF
可以通过按Ctrl+D(Linux)或Ctrl+Z(Windows)生成。这是非常糟糕的,scanf()
可以返回EOF,但不能为其设置目标变量,这只是虚构的,您无法测试此代码。谢谢。修正了jensIt的错误,需要注意的是control-D只会在一行的开头或按下两次时导致EOF。它实际上不会生成EOF。相反,它将键盘输入缓冲区的内容发送到程序。输入处理软件将接收零字符的读取请求解释为EOF。因此,当没有字符挂起时,control-D会导致EOF行为。当字符处于挂起状态时,Control-D会立即发送它们,而不是在按下enter键时发送,而不会导致EOF行为。这正是我要搜索的。
int c;
while(scanf("%d", &c)!=EOF) { //to ensure there is some input value as scanf will return EOF when input stream finishes.
printf("%d\n", c);
if(c == EOF) {
printf("c is equal to EOF\n");
break;
}
}