Мне нужно написать программу, в которой люди могут выбирать геометрические фигуры и вычислять их объем или площадь.Сложность, фиксирующая бесконечный цикл
Когда пользователь выбирает неправильный ввод, он выдаст им сообщение об ошибке (PLS снова выберите номер). Однако, когда пользователь выбирает любую букву, этот вход вызовет цикл цикла навсегда. Я подозреваю, что заявление 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's. Вам нужно условие, которое останавливает цикл, иначе ваш 'goto' просто будет действовать как' while (true) ' – Keiwan
да, все мои коммутаторы содержат бесконечные циклы, но я хотел их. Я думал, что пользователь может вычислить результат более одного. если у вас есть свободное время, PLS напишите этот код и сначала f.e введите 2 или 3, затем a или любую букву. вы увидите мою проблему. оба они разные. Спасибо за ответ – Cetger