首页 > 解决方案 > 提示用户重新输入号码

问题描述

我正在做一个练习“do while”程序,我希望用户输入三个数字,程序将在屏幕上打印总和。收到答案后,程序会询问用户是否要输入另外三个数字来获得另一个答案,以此类推。我对此很好。

如果用户输入的不是整数(“A,!,%”)等,我希望程序提示用户重新输入一个数字。请参阅程序中的注释。

#include <stdio.h>

/*
Do - While

This program shall ask the user to enter
three numbers and print out the sum. Entering letters
or special characters will ask the user to re-enter that
number.

example:

Enter Number 1: 2
Enter Number 2: 5
Enter Number 3: 9

Answer is 16

...

Enter Number 1: 2
Enter Number 2: yum   here user incorrectly enters letters
Enter Number 2: 8     re-prompted to enter number to continue
Enter Number 3: 9

Answer is 19

*/

int main(void) {
    int a,b,c,ans,n;
    do{
        do{
            printf("Enter Number 1: ");
            scanf("%d", &a);
            printf("\n");
        }
        while((a>0) || (a<0)|| (a==0));

        do{
            printf("Enter Number 2: ");
            scanf("%d", &b);
            printf("\n");
        }
        while((b>0) || (b<0)|| (b==0));

        do{
            printf("Enter Number 3: ");
            scanf("%d", &c);
            printf("\n");
          }
        while ((c>0) || (c<0)|| (c==0));

        ans = a+b+c;

        printf("Answer is %d\n\n", ans);

        printf("Press 1 to start over, or 0 to quit...");
        scanf("%d",&n);
        printf("\n");

    }while (n!=0);

   return 0;
}

标签: cdo-while

解决方案


您可以使用 fgets 获取输入并使用 strtol() 将用户输入的字符串转换为 int。如果当用户输入不是以数字开头或其中包含数字时 strtol 返回 0。从那里您可以检查用户输入是否为 0,然后重新提示用户,直到 a 不为 0。

*instead of scanf()*
char num1[5];
char *end;
fgets(num1, 5, stdin);
a = strtol(num1, &end, 10);
while( a = 0){
    fgets....
}

推荐阅读