2016-10-15 1 views
-4

Мне нужно написать программу, в которой люди могут выбирать геометрические фигуры и вычислять их объем или площадь.Сложность, фиксирующая бесконечный цикл

Когда пользователь выбирает неправильный ввод, он выдаст им сообщение об ошибке (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; 
} 
+0

Ну, все ваши коммутационные шкафы содержат бесконечные петли из-за 'goto'. Как подсказка для почти всегда: просто не используйте 'goto'. Вы можете заставить все работать без 'goto'. В этом случае, однако, я даже не знаю, что должно произойти с 'goto's. Вам нужно условие, которое останавливает цикл, иначе ваш 'goto' просто будет действовать как' while (true) ' – Keiwan

+0

да, все мои коммутаторы содержат бесконечные циклы, но я хотел их. Я думал, что пользователь может вычислить результат более одного. если у вас есть свободное время, PLS напишите этот код и сначала f.e введите 2 или 3, затем a или любую букву. вы увидите мою проблему. оба они разные. Спасибо за ответ – Cetger

ответ

0
  1. Просто включите опцию для выхода в меню
  2. Удалить GOTO заявления
  3. заключите переключатель в Do-While цикл, который будет работать, если не будет введен выбор для выхода

Like This:

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); 

Надеюсь, что это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^