2016-10-15 9 views
-4

人々は幾何学的図形を選択してボリュームや面積を計算できるプログラムを書く必要があります。無限ループを修正するのが難しい

ユーザーが間違った入力を選択すると、エラーメッセージが表示されます(数字をもう一度選択)。しかし、ユーザーが任意の文字を選択すると、この入力はプログラムを永遠にループさせます。私はgotoステートメントが問題の一部であると思うし、私はそれなしでこのプログラムを書く方法がわからない。誰でも助けてくれますか?

#include <stdio.h> 
#include<stdlib.h> 
int main(void) 
{ 
int a,i; 
float r,h,s,ya,kk,uk; 
float pi=22/7.0; 
g:printf("number pls\n"); 
printf("cylinder:1\sphere:2\ncube:3\nrectangle:4\npyramid:5\n"); 
scanf("%d",&a); 
switch(a) 
{ 
case 1: i=1; 
     e:printf("%d.h pls ",i); 
     scanf("%f",&h); 
     printf("%d.r pls ",i); 
     scanf("%f",&r); 
     ya=pi*r*r; 
     s=ya*h; 
     printf("%d.: %.2f'\n\n\n",i,s); 
     i=i+1; 
goto e; 
break; 
case 2: i=1; 
     d:printf("%d.r\n",i); 
     scanf("%f",&r); 
     s=(4/3.0)*pi*r*r*r; 
     printf("%d.: %.2f \n\n",i,s); 
     i=i+1; 
goto d; 
break; 
case 3: i=1; 
     c:printf("%d.kk pls\n",i); 
     scanf("%f",&kk); 
     s=kk*kk*kk; 
     printf("%d.: %.2f dir\n\n\n",i,s); 
     i=i+1; 
goto c; 
break; 
case 4: i=1; 
     b:printf("%d.kk pls ",i); 
     scanf("%f",&kk); 
     printf("%d.uk pls ",i); 
     scanf("%f",&uk); 
     printf("%d.h pls ",i); 
     scanf("%f",&h); 
     s=kk*uk*h; 
     printf("%d. %.2f \n\n",i,s); 
     i=i+1; 
goto b; 

break; 
case 5: 
a:  printf("%d.kk pls",i); 
     scanf("%f",&kk); 
     printf("%d.uk pls",i); 
     scanf("%f",&uk); 
     printf("%d.h pls",i); 
     scanf("%f",&h); 
     ya=kk*uk; 
     s=(1/3.0)*ya*h; 
     printf("%d.%.2f \n\n\n",i,s); 
goto a; 


break; 
default: printf("ERROR pls choose number again.\n"); 
goto g; 
} 
return 0; 
} 
+0

まあ、すべてのスイッチケースには、「goto」のために無限ループが含まれています。ほとんどの場合のヒントとして、単にgotoを使わないでください。あなたは 'goto'なしですべてを動作させることができます。しかし、この場合、私は「goto」で何が起こっているのか分かりません。 'goto'sは' while(true) 'のように動作します。 – Keiwan

+0

はい、私のすべてのスイッチケースには無限ループが含まれていますが、私はそれを望んでいました。私はユーザーが複数の結果を計算したいと思っていたと思った。あなたは自由な時間があれば、plsはそのコードを書いて、最初にf.eは2または3、後でaまたは任意の文字を入力します。あなたは私の問題を見るでしょう。どちらも違います。返信ありがとう – Cetger

答えて

0
  1. ちょうどあなたが終了
のための選択肢を入力しない限り実行されますがdo-whileループ内にスイッチを囲み、あなたのメニューの終了のためのオプション
  • 削除のgoto文
  • が含まれます

    このように:

    printf("cylinder:1\sphere:2\ncube:3\nrectangle:4\npyramid:5\nexit:6\n"); 
    scanf("%d",&a); 
    do{ 
    switch(a) 
    { 
    case 1: //code goes here 
         break; 
    case 2: //code goes here 
         break; 
    . 
    . 
    . 
    . 
    case 6: break; 
    } 
    
    }while(a!=6); 
    

    希望に役立つ!

  • 関連する問題