scanf中的字符输入(“%d”,& value)

时间:2014-09-20 06:03:19

标签: c printf scanf

简而言之,我的代码是,

#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,会发生什么?

3 个答案:

答案 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仍有第一个输入数字数据。

因此,无限循环来了。