我正在尝试创建一个用户输入三个整数的程序,另一个函数检查他们的输入是否有效。如果输入无效,则用户必须输入三个新数字。
#include <stdio.h>
int sanitizedInput(int a, int b, int c)
{
if(scanf("%d", &a)==0)
{
printf("Not a number\n");
return 1;
}
else if(scanf("%d", &b)==0)
{
printf("Not a number\n");
return 1;
}
else if(scanf("%d", &c) == 0)
{
printf("Not a number\n");
return 1;
}
else
return 0;
}
int main()
{
int a;
int b;
int c;
int check = 1;
do
{
check = 0;
printf("Enter a number:");
scanf("%d",&a);
printf("Enter a number:");
scanf("%d",&b);
printf("Enter a number:");
scanf("%d",&c);
check = sanitizedInput(a,b,c);
}while(check);
}
然而,当我运行此代码时,在输入三个有效整数后,终端中没有任何内容显示,代码仅在输入6个整数后终止。 (主函数中还有其他函数和代码,如果找到问题所需的代码告诉我,我会发布它。)
答案 0 :(得分:1)
您的代码和您的写作部分不匹配.....
int sanitizedInput(int a, int b, int c) { if(a==0 || b==0 || c==0) { return 1; } else { printf("They are valid.....\n"); return 0; } }
然后,如果其中一个无效,您将能够为1
的返回值另外输入三个输入。因为while(1)
是true
条件。
答案 1 :(得分:0)
除去
printf("Enter a number:");
scanf("%d",&a);
printf("Enter a number:");
scanf("%d",&b);
printf("Enter a number:");
scanf("%d",&c);
并继续使用check = sanitizedInput(a,b,c);
,并将printf(&#34;某些内容\ n&#34;)添加到
else
return 0;
阻止
看看会发生什么
答案 2 :(得分:0)
在main()中,您输入三个数字a,b,c并将这些变量作为sanitizedInput()的参数传递。
这里,不是检查变量,而是再次使用scanf(),它将接受新的输入。
if(scanf("%d", &a)==0)
上述if条件不会检查&#39; a&#39;的值,它将使用&#39; 0&#39;来检查scanf()的返回值。
如果陈述应该是这样的
if(a==0)
scanf("%d",&a);
对于所有三个变量都是一样的。
在main函数中,您将变量传递给sanitizedInput(),在那里检查变量,如果无效,则再次输入,因此您更改的变量是该函数的本地变量,不会反映在main()中。所以要小心。 希望这会对你有所帮助。
答案 3 :(得分:0)
在while
循环中,实际上每个变量(scanf
)都会调用a,b,c
两次,因此您输入的数字为6次。当sanitizedInput(a,b,c)
完成时,它返回0 ;所以check
为0,循环结束。我认为您可以在main
中执行此操作:
int main
{
int a;
int b;
int c;
int check = 0;
do
{
check = sanitizedInput(a,b,c);
printf("check = %d\n",check);
}while(!check);
return 0;
}