0

これは簡単な答えかもしれません。私は C でプログラミングを始めて 1 か月しか経っていません。ユーザーにメニュー1-4が表示されるCプログラムを作成しています。メニュー オプション 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;
}
4

1 に答える 1

0

うまく機能しています.....

それぞれの後に設定case: countNumber=0;

または試す

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

それ以外の場合 ケース 1: ケース 2: dotNumber に最初に高い値を与え、最後に低い値を与えた後に 2 回試行しても機能しません

編集: C ライブラリ関数 void isdigit(int c) は、渡された文字が 10 進数文字であるかどうかをチェックします。

 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 . . .
于 2013-10-07T05:35:41.263 に答える