2016-10-15 2 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. 그냥 당신이 종료
에 대한 검색을 입력하지 않으면 실행이 메뉴에서 할 - while 루프 내에서 스위치를 동봉
  • 제거 고토 문을 종료하는 옵션을 포함 이처럼

    :

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

    희망은 도움이 !!