基本上所有學過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函數此程序執行完了*/
}
如果大家有問題,歡迎大家留言討論,我都會一一解答呦,歡迎關注,給你不一樣的自己!