-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;
}
まあ、すべてのスイッチケースには、「goto」のために無限ループが含まれています。ほとんどの場合のヒントとして、単にgotoを使わないでください。あなたは 'goto'なしですべてを動作させることができます。しかし、この場合、私は「goto」で何が起こっているのか分かりません。 'goto'sは' while(true) 'のように動作します。 – Keiwan
はい、私のすべてのスイッチケースには無限ループが含まれていますが、私はそれを望んでいました。私はユーザーが複数の結果を計算したいと思っていたと思った。あなたは自由な時間があれば、plsはそのコードを書いて、最初にf.eは2または3、後でaまたは任意の文字を入力します。あなたは私の問題を見るでしょう。どちらも違います。返信ありがとう – Cetger