难以修复无限循环

时间:2016-10-15 20:26:33

标签: loops forever

我必须编写一个程序,人们可以选择几何图形并计算它们的体积或面积。

当用户选择不正确的输入时,它会给出错误信息(请再次选择号码)。但是,当用户选择任何字母时,此输入将导致程序永远循环。我怀疑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;
}

1 个答案:

答案 0 :(得分:0)

  1. 只需在菜单中添加退出选项
  2. 即可
  3. 删除转到语句
  4. 将您的开关封闭在将运行的do-while循环中,除非您输入exit
  5. 选项

    喜欢这个:

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

    希望它能帮助!!