获取用户输入并使用函数检查其是否有效

时间:2016-07-28 12:06:02

标签: 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", &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个整数后终止。 (主函数中还有其他函数和代码,如果找到问题所需的代码告诉我,我会发布它。)

4 个答案:

答案 0 :(得分:1)

您的代码和您的写作部分不匹配.....

  1. 您应首先检查这三个数字是否有效。
  2. 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;
}