我在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 最后两个值是初始化值。
谁能告诉我我要做什么?
答案 0 :(得分:3)
在遇到输入中的第一个无效字符后,scanf函数不必读取。
%i说明符允许a作为十六进制,但它必须以0x开头。
如果a
是输入中的第一个字符,并且它应该与%i
匹配,则scanf之后不必读取任何内容 - 它可以在第一个无效字符处停止。
答案 1 :(得分:1)
对于每个转换说明符scanf
,尝试查找相应的数据项。 scanf
读取项目,当遇到可能不属于该项目的角色时停止。如果未成功读取任何项目,则scanf
会立即返回,而不会查看格式字符串的其余部分
当您输入a 5 10
时,scanf
会为说明符a
找到%i
。它会立即返回并停止阅读其他输入5
和10
。