scanf如何在这个简单的程序中工作?

时间:2014-01-28 18:48:08

标签: c scanf

我在while循环中使用scanf时遇到了一些麻烦。 我想创建一个程序,要求用户写三个整数并将它们保存在三个位置的数组中。如果用户写的不是整数,程序应该继续询问整数,直到他输入它为止。但它没有正常工作。

所以我尝试用这段代码简化问题:

#include <stdio.h>

int main()
{
    int num1=1;
    int num2=2;
    int num3=3;

    printf ("write a number\n");
    scanf("%i", &(num1));
    printf("%i\n",num1);

    printf ("write a number2\n");
    scanf("%i", &(num2));
    printf("%i\n",num2);

    printf ("write a number3\n");
    scanf("%i", &(num3));
    printf("%i\n",num3);
}

如果输入为3个整数,则没有问题。但是如果你为第一个整数写一个字符,例如a,则不扫描其他2个值,它只是写: 一个 2 3 最后两个值是初始化值。

谁能告诉我我要做什么?

2 个答案:

答案 0 :(得分:3)

在遇到输入中的第一个无效字符后,scanf函数不必读取。

%i说明符允许a作为十六进制,但它必须以0x开头。

如果a是输入中的第一个字符,并且它应该与%i匹配,则scanf之后不必读取任何内容 - 它可以在第一个无效字符处停止。

参考文献: http://www.gidnetwork.com/b-64.html

答案 1 :(得分:1)

对于每个转换说明符scanf,尝试查找相应的数据项。 scanf读取项目,当遇到可能不属于该项目的角色时停止。如果未成功读取任何项目,则scanf会立即返回,而不会查看格式字符串的其余部分 当您输入a 5 10时,scanf会为说明符a找到%i。它会立即返回并停止阅读其他输入510