goto语句
C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
从理论上讲,goto语句是没用必要的,实践中没用goto语句也很容易的写出代码。
但是某些场合下goto语句还是能用上,最常见的用法是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
这种情况是break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语句关机案例
int mian()
{
//C语言提供了一个函数 system() - 执行系统命令的
char input[20] = {0}; //存入输出的信息
system("shutdown -s -t 60");//system - stdib.h
again:
printf("注意,你的电脑将在1分钟内关机,如果不想关机,就输入:停止关机");
scanf("%s",input);
if(strcmp(input,"停止关机") == 0)//两个字符串比较不能用==,要用strcmp()
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
用while循环来代替goto语句
int mian()
{
char input[20] ={0};
system("shutdown -s -t 60");
while(1)
{
printf("注意,你的电脑将在1分钟内关机,如果不想关机,就输入:停止关机");
scanf("%s",input);
if(strcmp(input,"停止关机") ==0 );
{
system("shutdown -a");
break;
}
}
return 0;
}
可以从上面两个例子看出来,goto循环其实是可以被替代的,而且总体上来说普通循环的实用性比goto更好,所以真正goto语句适合的场景应该是多重循环,就比如下面的例子:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
...
error:
if(disaster)
//处理错误情况
注意:
goto语句只能在一个函数范围内跳转,不能夸函数
void Add()
{
flag:
printf("Add\h");
}
int main()
{
goto flag; //err
return 0;
}