基本上所有学过c语言编程的都会发现,编程书上对goto的描述基本是一笔带过,有的甚至直接指出不建议在程序里使用goto语句来进行编程。而让许多人奇怪的是goto语句从字义表面上看似乎是“非常好用的”。这常让许多新手编程者摸不着头脑。
记得以前曾有人问过阳哥(头条号:阳哥说IT),说:记得编程书上都不推荐用goto语句的,但是看很多源代码,goto也用的很多。有时候自己写一个模块,也觉得此时用goto是最方便的一种方式。那么,又是从什么方面,使得goto语句不被鼓励使用呢?是维护性,或编译器的角度等等?
在这里阳哥(头条号:阳哥说IT)就简单的说下这“奇怪的”goto语句的两个用途:
- 与if语句一起构成循环结构。
- 从多层循环的内层循环跳到外层循环。
可能到这,大家有些不够了解含义,那现在咱们用一个实例来更加清晰的了解一下这个用法。
用goto语句求解平方和
实例说明:任意给出一个自然数k,数k不为0,计算其各位数字的平方和k1,再计算k1的各位数字的平方和k2,......,如此重复,最终得到数1或145,此时再做数的平方和运算,他最终的结果是1或145.编程效果如下图:
编程如下:
#include
/*引用预处理命令,预处理包含stdio.h的头文件*/
main()
/*定义一个主函数,所有程序在执行前都开始于主函数,且结束于主函数*/
{
long a[10],n,i;
/*定义长整型变量n和i,长整型数组[10],其包含10个元素*/
p:printf("please input a number:\n");
/*对于p循环:请输入一个数*/
scanf("%ld",&n);
/*输入这个数n*/
if(n==0)
/*如果n等于0*/
goto p;
/*则跳出这个循环,重新输入*/
while(n!=1&&n!=145)
/*当n值不等于1和不等于145时*/
{
printf("n=%ld->",n);
/*输出 n->,其中,%ld指的是长整型标识*/
i=1;
/*i值赋1*/
while(n>0)
/*当n大于0时*/
{
a[i++]=n%10;
/*将n的个位数字存放到a的数组之中*/
n/=10;
/*取n除10后的数值,并继续循环*/
}
n=0;
/*n值赋0*/
i--;
/*i值累减*/
while(i>=1)
/*当i>=1时*/
{
printf("%ld*%ld",a[i],a[i]);
/*输出两个相同元素的乘积*/
if(i>1)
/*如果i>1*/
printf("+");
/*输出+*/
n+=a[i]*[i];
/*n等于两元素相乘的累加*/
i--;
/*i值继续累减*/
}
printf("=%ld\n",n);
/*输出长整型值,其含义是将最终求得的平方和n输出*/
}
return 0;
/*返回空值,0指空,没有,即将0返回给主函数main,其目的是告诉给main函数此程序执行完了*/
}
如果大家有问题,欢迎大家留言讨论,我都会一一解答呦,欢迎关注,给你不一样的自己!