我想在 C 中打印 EOF 的值。
char ch =getchar() ;
printf("%d",ch) ;
当我输入 CTRL + Z (我在 Windows 中工作)时,这会正确打印值 -1。
尽管。
char ch ;
scanf("%c",&ch) ;
printf("%d",ch) ;
错误地打印 126 。
这种异常行为的原因是什么?
我想在 C 中打印 EOF 的值。
char ch =getchar() ;
printf("%d",ch) ;
当我输入 CTRL + Z (我在 Windows 中工作)时,这会正确打印值 -1。
尽管。
char ch ;
scanf("%c",&ch) ;
printf("%d",ch) ;
错误地打印 126 。
这种异常行为的原因是什么?
是什么让你想到 scanf 会用 EOF 填充字符参数?
scanf 函数命中 EOF 并且它无法进行转换并返回。ch 的值是声明变量时堆栈上的随机值。
EOF 旨在与正在读取的文件中可能包含的任何值区分开来。
因此,当您从文件中读取并可能收到 EOF 时,您不应使用achar
来保存该值。您应该使用int
, 并且仅在您确认收到的不是EOFchar
之后将结果转换为。要获得正确的结果,请尝试以下操作:
int char;
ch = getchar();
printf("%d", ch);
对于您的第二个示例,当您使用 读取数据时scanf
,您可以通过检查其返回值来了解读取了多少(如果有)数据。如果遇到文件结尾,它将停止尝试转换输入,您将通过检查其返回值来了解有多少字段被成功转换。它不会尝试将 EOF 转换为变量。
你应该检查scanf的返回码,它应该返回EOF。在这种情况下,您的 char 不受影响,因为未初始化可能是 126