Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 修复无限循环的困难_Loops_Forever - Fatal编程技术网

Loops 修复无限循环的困难

Loops 修复无限循环的困难,loops,forever,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:pr

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

当用户选择不正确的输入时,它会给他们一条错误消息(请再次选择数字)。但是,当用户选择任何字母时,此输入将导致程序永远循环。我怀疑
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;
}
#包括
#包括
内部主(空)
{
int a,i;
浮动r、h、s、ya、kk、英国;
浮点数pi=22/7.0;
g:printf(“编号请\n”);
printf(“圆柱体:1\sphere:2\ncube:3\nrectangle:4\npyramid:5\n”);
scanf(“%d”和“&a”);
开关(a)
{
案例1:i=1;
e:printf(“%d.h pls”,i);
扫描频率(“%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;
转到e;
打破
案例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;
转到d;
打破
案例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;
后藤c;
打破
案例4:i=1;
b:printf(“%d.kk pls”,i);
scanf(“%f”和&kk);
printf(“%d.uk pls”,i);
scanf(“%f”和英国);
printf(“%d.h pls”,i);
扫描频率(“%f”、&h);
s=kk*uk*h;
printf(“%d.%.2f\n\n”,i,s);
i=i+1;
后藤b;
打破
案例5:
a:printf(“%d.kk pls”,i);
scanf(“%f”和&kk);
printf(“%d.uk pls”,i);
scanf(“%f”和英国);
printf(“%d.h pls”,i);
扫描频率(“%f”、&h);
ya=kk*英国;
s=(1/3.0)*ya*h;
printf(“%d.%.2f\n\n\n”,i,s);
转到a;
打破
默认值:printf(“错误,请再次选择数字。\n”);
后藤g;
}
返回0;
}
  • 只需在菜单中包含一个退出选项
  • 删除goto语句
  • 将交换机封装在do 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);
    

    希望能有帮助

    好吧,由于
    goto
    ,您的所有交换机案例都包含无限循环。作为一个经常使用的提示:不要使用
    goto
    。无需转到
    即可使一切正常运行。然而,在这种情况下,我甚至不知道使用
    goto
    s会发生什么。你需要一个停止循环的条件,否则你的
    goto
    s就像
    一样,而(true)
    是的,我的所有开关都包含无限循环,但我想要它。我认为用户可以不止一次地计算结果。如果你有空,请写下代码,先输入2或3,然后输入a或任何字母。你会明白我的问题。两者都不同。谢谢你的回复