我试图限制用户输入字母(例如:重复输入,直到提供正确的输入),以便只添加数字。不知何故,我无法添加字母,但是没有加“ 1”
如果给出带有字符的数字,则该数字递增1。
#include<stdio.h>
int main() {
int x,y;
while(1)
{
printf("Enter a number > ");
if(scanf("%d%d",&x,&y) != 1){
printf("%d",x+y);
break;
}
}
return 0;
}
其背后的原因可能是什么?
答案 0 :(得分:1)
scanf()
返回它针对给定输入执行的成功转换次数。
使用
scanf("%d%d", &x, &y)
您要求输入两个整数,因此scanf()
将成功返回2
。但是,您的代码会检查!= 1
,如果scanf()
返回0
也是正确的,因为您输入了“ a b”并且无法进行对话。
如果不是所有转换都成功,则所有不属于成功转换的字符都保留在stdin
中,下一个scanf()
将尝试再次解释它们并失败。为了防止这种情况发生,您必须“清除”它们:
#include <stdio.h>
int main()
{
while(1)
{
printf("Enter two numbers: ");
int x, y; // define variables as close to where they're used as possible
if (scanf("%d%d", &x, &y) == 2) {
printf("%d\n", x + y);
break;
}
else {
int ch; // discard all characters until EOF or a newline:
while ((ch = getchar()) != EOF && ch != '\n');
}
}
return 0;
}
更具意识形态的方式:
int x, y;
while (printf("Enter two numbers: "),
scanf("%d%d", &x, &y) != 2)
{
fputs("Input error :(\n\n", stderr);
int ch;
while ((ch = getchar()) != EOF && ch != '\n');
}
printf("%d\n", x + y);