C编程-提示用户重新输入号码

时间:2019-03-04 20:39:25

标签: c do-while calc

我正在练习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;
}

2 个答案:

答案 0 :(得分:0)

您可以使用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....
}

答案 1 :(得分:0)

您的程序包含多个重复的部分。由于您要收集三个数字,因此应该使用一个运行3次的for循环。

for (int i = 0; i < 3; i++) {
  /* ... */
}

在for循环中,您每次都收集第i+1个数字。如果用户输入的数字无效,则您将继续尝试收集该数字。因此,包含printfscanf的do-while循环将进入for循环内。

for (int i = 0; i < 3; i++) {
  do {
    printf("Enter Number %d: ", i+1);
    scanf( /* ... */ );
  } while ( /* ... */ );
}

scanf返回已成功读取为int的输入项目数。因此,只要scanf的返回值为零,就应该重复执行do-while循环。我们可以将返回值存储在变量中,然后在while (...);中检查变量,但是我们可以将scanf本身移到while (...);中。我们还需要一个数组来存储三个输入数字。

int n[3];
for (int i = 0; i < 3; i++) {
  do {
    printf("Enter Number %d: ", i+1);
  } while (scanf("%d", n+i) == 0);
}

程序的其余部分将遍历数组并存储元素的总和。然后,您将输出总和。这种方法既健壮又可维护,因为更改输入数字的数量很容易,并且消除了重复或类似的代码段。