新人问题:C语言中goto的用法
我以前用过批处理中的goto,定义标签段,然后goto标签名就可以了,C语言中不是这样吗。这个程序是C语言入门经典中的一个作业,程序的功能是输入一个算式,计算出结果后,提示用户是结束还是返回继续下一个运算。
计算部分差不多实现了,但是那个goto跳转有问题,求帮看一下。
程序代码:
//练习1 #include <stdio.h> #include <conio.h> #include <stdlib.h> int system(const char *string); //清屏的函数声明,包含在stdlib.h int main () { double a = 0, b = 0; long int long_a, long_b; char c ; _calc: //calc标签 printf("请输入一个加减乘除或取模的运算,在各元素之间加一个空格,例如:\n100 + 100\n"); scanf("%lf %c %lf",&a, &c, &b); long_a = int(a); //转换成long int型 long_b = int(b); switch(c) { case '+': system("cls"); //调用函数清屏 printf("%lf %c %lf = %lf",a, c, b,a + b ); break; case '-': system("cls"); printf("%lf %c %lf = %lf",a, c, b,a - b ); break; case '*': system("cls"); printf("%lf %c %lf = %lf",a, c, b,a * b ); break; case '/': if(b == 0) { printf("除数不能为0"); break; } else if(a - long_a == 0 ) //这里用double型a减去强制转换成整数的a判断其是否为整数,如果为整数则输出的结果用整数商+余数的形式 { system("cls"); printf("\n%d %c %d = %d 余 %d",long_a, c, long_b, long_a / long_b,long_a % long_b); break; } else { system("cls"); printf("%lf %c %lf = %lf",a, c, b,a / b ); break; } case '%': if(a - long_a == 0)// 因为只能是整数才能求余,故这里判断被除数是否为整数 { if(b - long_b == 0 && b != 0)//判断除数是否为整数和是否为0 { system("cls"); printf("%d %c %d = %d",long_a, c, long_b,long_a % long_b ); break; } else printf("求余时除数不能为浮点数也不可为0"); break; } else printf("被除数不能为浮点数"); break; default: break; } printf("\n返回请按y,退出请按其他任意键\n"); scanf("%c",&c); if (c == 'y' || c == 'Y') { system("cls"); goto _calc; //在这里跳转到标签 //问题处:不能跳转到标签 } //else // exit; getch(); return 0 ; }
[此贴子已经被作者于2015-11-5 16:19编辑过]