使用goto语句是不是只是对代码顺序的一个跳转,而没有对代码内容产生实质影响?
早期版本的BASIC和FORTRAN所依赖的goto语句,在C语言中仍旧适用。但是C和其他的两种语言不同,没有goto语句,C程序能更好的执行。Kernighan和Ritchie提到goto语句易被滥用,并建议谨慎使用或者不用。接下来相应介绍goto语句。
goto语句由两部分:goto和标签名。标签名遵循变量命名规则:goto part1;
要让这条语句正常运行,函数必须如下形式:
part2: printf("Refined analysis:");
原则上,根本不用在C语言程序中使用goto语句。但是这个语句在FORTRAN或者BASIC中是必不可少的。按照书本要求来写的话,在此之前列举一些使用goto的常见情况,然后再介绍C的解决方案。
if (size > 12)
goto a;
goto b;
a:cost = cost * 1.05;
flag = 2;
b:bill = cost * flag;
对于以前的BASIC和FORTRAN,只有直接跟在if条件后面的一条语句才属于if,不能不能使用块或复合语句。
if (size > 12)
{
cost = cost * 1.05;
flag = 2;
}
bill = cost * flag;
实际上,continue和break是goto语句的一个延伸,而且好处是名称已经表明他们的用法了,不需要再使用标签进行说明的。而且,goto语句会打乱原来代码的运行顺序,从而导致代码无法得到我们想要的结果,所以要少用,或者不用。
当然可以向鹏哥学习
用goto语句写一个应用代码,如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
again:
printf("Please note that your PC will shut down in 60 seconds\n");
printf("If you enter:我是小猪.Cancel the shutdown\n");
scanf("%s",input);
if(strcmp(input, "我是小猪") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
注意goto语句只能在一个函数范围内跳转,不能跨函数。可以测试:
#include<stdio.h>
void test()
{
flag:
printf("test\n");
}
int main()
{
goto flag;//这里就会红色报错,显示标签flag未定义;
return 0;
}