循环不正常,也需要数据验证

时间:2013-10-07 05:31:49

标签: c

这可能是一个简单的答案。我只用C编程了一个月。 我正在创建一个C程序,向用户显示菜单1-4。 菜单选项1-3向用户询问整数,当输入整数时,程序会写入或“绘制”该数量的“点”或句点。 每个第一个选项将执行相同的功能,但分别是while循环,do-while循环和for循环。 终止程序的唯一方法是在主菜单中选择4。

我的问题是如何让我的程序循环并继续正常工作。 当我执行程序时,它第一次正常工作,但程序循环回主菜单。没有其他选择可行。 IE:如果我再次为“点图”尝试输入一个整数,它就无法正常工作。

我也无法在任一菜单上验证字母或“非数字”的输入,如果您输入一个字母,它会破坏程序。

我不知道该做什么以及去哪里。 我不需要重写代码,也许只是一些关于在哪里采取它的想法。 我会接受提供的任何参考或链接。 我的不完整计划的副本包含在下面:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{




system("cls");

int programRun=0;
int menuSelection=0;
int absmenuSelection=0;
int dotNumber=0;
int countNumber=0;
char enter;

while(programRun==0)
{
system("cls");
printf("\nplease make a number selection\n");
printf("Please select a choice:\n");
printf("[1] While loop...\n");
printf("[2] Do-While loop...\n");
printf("[3] For loop...\n");
printf("[4] Exit program...\n\n");

scanf("%d%c",&menuSelection,&enter);
    absmenuSelection= abs(menuSelection);


   if (absmenuSelection <1 || absmenuSelection>4)
    {
    }
    switch (absmenuSelection)
    {
        case 1:
            printf("\nPlease input a number for the amount of dots you wish to see...");
            scanf("%d", &dotNumber);
            if(dotNumber > 0)
            {
                while(countNumber<dotNumber)
                {
                countNumber++;
                printf(".");
                }
            }
            else{
                printf("\nsorry, that is an invalid response. Now you have to try again.\n");
                }
            printf("\n");

          system("pause");
          break;

        case 2:
              printf("\nPlease input a number for the amount of dots you wish to see...");
              scanf("%d", &dotNumber);
              if(dotNumber > 0)
              {
                do
                {
                countNumber++;
                printf(".",countNumber);
                }
                while( countNumber<dotNumber );
              }
              else
              {
                printf("\nsorry, that is an invalid response. Now you have to try again.\n");
              }
          printf("\n");
          system("pause");
          break;

        case 3:
              printf("\nPlease input a number for the amount of dots you wish to see...");
              scanf("%d", &dotNumber);
              if(dotNumber > 0)
              {
                  for(countNumber=0;countNumber<dotNumber;countNumber++)
                  {
                      printf(".",countNumber + 1);
                  }
              }
              else
              {
                printf("\nsorry, that is an invalid response. Now you have to try   again.\n");
              }

          printf("\n");
          system("pause");
          break;

        case 4:
            while(programRun>1)
            programRun=1;
            printf("\nOkay have a nice day");
            return 0;

        default:
               printf("\nsorry that is an invalid statement, try again\n\n");
               system("pause");
    }}

system ("pause") ;
return 0;
}

1 个答案:

答案 0 :(得分:0)

效果很好.....

在每个case: countNumber=0;

之后设置

或尝试

if(dotNumber > 0)
            {
countNumber=0;
/*REST */
}

否则案例1:案例2:如果我在首先给dotNumber一个更高的值并且在最后给出更低的值后尝试2次

将无效

修改 C库函数void isdigit(int c)检查传递的字符是否为十进制数字字符。

 if( isdigit(variableHere) )
   {
      //is a digit
   }

示例o / p

please make a number selection
Please select a choice:
[1] While loop...
[2] Do-While loop...
[3] For loop...
[4] Exit program...

1

Please input a number for the amount of dots you wish to see 4
....
Press any key to continue . . .