C 获取用户输入并使用函数检查其是否有效
我试图创建一个程序,其中用户输入三个整数,另一个函数检查它们的输入是否有效。如果输入无效,则用户必须输入三个新数字C 获取用户输入并使用函数检查其是否有效,c,C,我试图创建一个程序,其中用户输入三个整数,另一个函数检查它们的输入是否有效。如果输入无效,则用户必须输入三个新数字 #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",
#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);
}
#包括
整数净化输入(整数a、整数b、整数c)
{
如果(scanf(“%d”,&a)==0)
{
printf(“不是数字”);
返回1;
}
else if(scanf(“%d”,&b)==0)
{
printf(“不是数字”);
返回1;
}
else if(scanf(“%d”,&c)==0)
{
printf(“不是数字”);
返回1;
}
其他的
返回0;
}
int main()
{
INTA;
int b;
INTC;
整数检查=1;
做
{
检查=0;
printf(“输入一个数字:”);
scanf(“%d”和“&a”);
printf(“输入一个数字:”);
scanf(“%d”和“b”);
printf(“输入一个数字:”);
scanf(“%d”、&c);
检查=消毒输入(a、b、c);
}while(检查);
}
但是,当我运行此代码时,在输入三个有效整数后,终端中不会显示任何内容,并且代码仅在输入6个整数后终止。(主函数中还有其他函数和代码,如果需要这些代码来查找问题,请告诉我,我会发布。)删除
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(“某物\n”)添加到
else
返回0代码>块
查看main()中发生的情况,您正在为三个数字a、b、c获取输入,并将这些变量作为sanitizedInput()的参数传递
在这里,您不再检查变量,而是再次使用scanf(),它将接受新的输入
if(scanf("%d", &a)==0)
上面的if条件不会检查“a”的值,它会检查scanf()的返回值和“0”
if语句应该是这样的
if(a==0)
scanf("%d",&a);
这对所有三个变量都是一样的
在main函数中,您将变量传递给sanitizedInput(),在这里您将检查变量,如果变量无效,您将再次获取输入,因此您更改的变量是该函数的局部变量,不会反映在main()中。所以要小心。
希望这会对您有所帮助。在循环中,您实际上调用了scanf
两次每个变量(a,b,c
),所以您输入了6次数字。当清理输入(a,b,c)
完成时,它返回0;因此,检查
为0,循环结束。我认为您可以在主
中执行以下操作:
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;
}
您的代码和编写部分不匹配
你应该首先检查这三个数字是否有效李>
然后,如果其中一个无效,您将能够为1
的返回值接受另外三个输入。因为while(1)
是true
条件。为什么要将读取的变量传递给函数,然后只读取另外3个数字?
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;
}
}