Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 获取用户输入并使用函数检查其是否有效_C - Fatal编程技术网

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;
        }
    }