简而言之,我的代码是,
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
while(n != 0)
{
scanf("%d", &n);
printf("%d\n", n);
}
return 0;
}
它是为integer
输入编写的。但是如果我输入一个character
(虽然n被删除为integer
),循环变为无限并打印最后integer
个输入值。如果我首先输入character
,它似乎打印了一个内存地址。我的问题是,如果我输入character
而不是integer
,会发生什么?
答案 0 :(得分:2)
实际上当插入另一个字符时,它不会被视为输入,它存在于输入缓冲区中,它不能被控制字符串读取。
%d
控制字符串用于读取整数字符,直到其他字符为止。
由于读取任何内容而插入其他字符时,循环不断运行并打印变量的现有值。
答案 1 :(得分:2)
当scanf失败时,它不会从输入缓冲区中删除该字符(它会在成功时从缓冲区中删除数据)。因此,下一次在循环中触发scanf时,它根本不会等待用户输入(因为它的缓冲区中有未读字符)。但它再次失败,并再次失败(因为每次失败)因此将进入无限循环。
我坚信第一个scanf包含%c 作为格式说明符。
你可以通过
if(scanf("%d",&n)==0) break;
答案 2 :(得分:0)
scanf("%d", &n);
表示只从stdin获取数字数据,例如1,2。
因此,如果您在第二个输入中键入char
,例如'a','b',则输入字符不会存储在&n
中。 n
仍有第一个输入数字数据。
因此,无限循环来了。