私は以下のような単純なメニュー駆動のCコードでエラーチェックを強化する方法を見つけ出すのに苦労しています。コードは適切な入力でうまく動作しますが、残念ながら引数が間違っていると無限ループになります。誰かが私にこの事件を手伝ってもらえますか?メニュー駆動型プログラムは無限ループで終わります
#include<stdio.h>
int main()
{
int choice, num, i;
unsigned long int fact;
system("clear");
do
{
printf("1.Factorial\n");
printf("2.Prime\n");
printf("3.Odd/Even\n");
printf("4.Exit\n");
printf("\nYour choice?");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\nEnter number:");
scanf("%d",&num);
fact = 1;
for(i=l;i<=num;i++)
fact=fact*i;
printf("\n Factorial value=%lu\n",fact);
break;
case 2:
printf("\n Enter number:");
scanf("%d",&num);
for(i=2;i<num;i++)
{
if(num%i== 0)
{
printf("\n Not a prime number.\n");
break;
}
}
if(i==num)
printf("\n Prime number.\n");
break;
case 3:
printf("\nEnter number:");
scanf("%d",&num);
if(num %2==0)
printf("\n Even number.\n");
else
printf("\nOdd number.\n");
break;
case 4:
break;
default:
printf("\nInvalid Argument.\n");
}
}while(choice != 4);
return 0;
}
コードが入力1,2,3,4 and any other integer
と正常に動作しますが、私は、文字または文字列を入力すると、コードが無限ループに入る:
は、ここに私のコードです。どうして?このケースをどう扱うか?
インデントしてください。このコードは、そのような難しい左翼を踏襲するのは本当に難しいです。 – tadman
'scanf()'の戻り値を調べます。 'scanf()'関数は、文字または文字列が入力されたときにゼロを返します。 – iqstatic
すべての警告とデバッグ情報( 'gcc -Wall -g')でコンパイルしてください。次に**デバッガ** gdbを使用してください(これはあなたが使い方を学ぶべきです)。 –