请考虑以下代码:
#include<stdio.h>
int main(){
char c;
while( ( c=getchar() ) != EOF )
printf("%c\n",c);
return 0;
}
我输入的内容为:hi ^ Z
输出结果为:
h i (an arrow pointing towards left)
[抱歉,我无法找到上述箭头的字符。 ]
有人可以解释输出吗?由于^ Z是字符串的一部分,并且有要冲洗的字符,我认为^ Z不应该被传递,因此输出应该是,
h i (new line )
P.S - 我在窗户上,因此^ Z就是EOF。
答案 0 :(得分:4)
问题在于,char
不足以保存EOF
的值。您需要使用int
类型。
将char c;
更改为int c;
。
也就是说,getchar()
将返回标准输入中的任何待处理项。如果在输入后使用键组合,则操作类似于刷新流。要从EOF
返回getchar()
,您需要再次按下组合键。
简而言之,如果您希望getchar()
在 CTRL + Z 上返回EOF
,请确保stdin
中没有任何内容1}}。
也就是说,对于托管环境,main()
的正确签名至少为int main(void)
。
答案 1 :(得分:1)
参考http://www.cplusplus.com/reference/cstdio/getchar/
它表示getchar
的返回类型为int
。编译器应该发出警告。请不要忽视此类警告。
您要将int
分配给char
,这将导致丢失。尝试将其打印到int
并打印出来。
您也可以使用int
在printf
打印%c
并将其转型为char
。