#include<stdio.h>
int main()
{
int c;
while((c=getchar())!=EOF)
putchar(c);
putchar(c); //2nd putchar
getch();
}
在《C by Ritchie n Kernighan》一书中的上述代码中,将 c
声明为 int
变量的原因如下:
so that
c
may be able to hold the code ofEOF
which is outside the char codes which achar
datatype can accommodate.
但是当我将 c 声明为字符并输入 EOF
(CTRL-Z + Enter)时,该值(在我的计算机上为 -1)确实会进入 c 并且我立即结束up 退出 while up,就像我将 c 声明为 int 时发生的情况一样。
当 char 工作正常时,为什么我们需要将 c 声明为 int?或者我在这里遗漏了什么?
还有一件事,在第二个 putchar
语句中,它应该在收到 EOF
后打印 c 的最后一个值(即 -1),但它没有。为什么?
最佳答案
char
有符号还是无符号是由实现定义的。
如果 char
是无符号的,则 char
值不能等于 EOF
,循环将永远不会退出。
如果 char
有符号,则 EOF
可能等于 c
,这就是您计算机上发生的情况。但问题是,这也意味着,有效的 char
可能等于 EOF
,导致循环过早退出。
关于c - 用于保存 getchar() 输入的变量的数据类型,作为 char 而不是 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381628/