在我测试之前,我一直认为scanf("%c" , &addr);
等同于getchar()
:
#include<stdio.h>
int main()
{
int i;
scanf("%c",&i);
printf("%d\n", i);
if(i == EOF)
printf("EOF int type and char input\n");
i =getchar();
printf("%d\n", i);
if(i == EOF)
printf("EOF int type and char input\n");
}
我使用“Ctrl + D”两次时得到了以下输出:
由于 EOF 在 int 类型中的值是 -1,我尝试使用-1217114112
-1
EOF int 类型和 char 输入
scanf("%d",&i)
替换 scanf("%c",&i)
,但仍然得到相同的输出。我感到困惑。有人可以为我解释一下吗?
----------------------------------编辑-----------------------------------------------
我想知道
scanf("%c",i)
加上 Ctrl+D 的行为,我进行了测试:#include<stdio.h>
int main()
{
int i;
int j;
j = scanf("%c",&i);
printf("%c\n", i);
printf("%d\n", j);
if(i == EOF)
printf("EOF int type and char input");
i =getchar();
printf("%d\n", i);
if(i == EOF)
printf("EOF int type and char input");
}
输出:
k // If the scanf set 1 byte in i , why here print 'k' ?
-1
-1
EOF int type and char input
k
是在尝试将其作为char
而不是它本来的类型——int
传递给scanf()
处理之前在i
中的随机垃圾值。当scanf()
遇到 EOF(零个字符可读)时,它根本不会对变量进行赋值;它只会返回 EOF。如果j
不为 1,则关于i
中的内容没有任何有用的信息; 它的值是不确定的(但可能与函数调用之前相同 —— 但在示例代码中,这是未定义的,因为i
没有初始化)。 - Jonathan Leffler