c語言為什么不能用goto寫循環(huán) C語言怎么用goto實現(xiàn)循環(huán)
goto語句不是不可以用,是不可濫用,要慎用。goto至少有一處可顯神通,它能從多重循環(huán)中咻地一下子跳到外面,……就像房子著火了,來不及從樓梯一級一級往下走,可從窗口跳出火坑。……”(《高質(zhì)量C++/C編程指南》第32頁)
goto只是簡單的跳轉(zhuǎn)語句,并沒有錯,但跳轉(zhuǎn)之前可以做限定 ,if & goto 這兩個可以一起用,但盡量是少用,如果避免過多的嵌套循環(huán),可以使用break和continue來完成循環(huán)退出 。
goto的目標(biāo)是一個標(biāo)號,這個標(biāo)號的起名倒有點意思,因為標(biāo)號只用于goto,所以它的名字可以與任何變量名以及其它標(biāo)識符一樣而不產(chǎn)生重名。以前的程序是帶行號的,所以就“goto 行號”,現(xiàn)在程序不帶行號了,但是允許在任何地方加標(biāo)號。編譯器在碰到它們的時候,大概就是憑其后頭的冒號來判斷這個名字不需要檢驗合法性。
下面舉例說明:
#include <stdio.h>
void main()
{
int n, m;
/*這個循環(huán)輸出1 2 3 4, 在n是5的時候循環(huán)退出*/
for ( n = 1; n <= 10; n ++ )
{
if ( n == 5 )
break;
printf( " %d", n );
}
printf( "\n" );
/*這個循環(huán)輸出1 2 3 4 6 7*/
for ( m = 1; m <= 10; m ++ )
{
/*在m是5的時候沒有執(zhí)行當(dāng)次循環(huán)的其他語句,所以未輸出5*/
if ( m == 5 )
continue;
/*在m是8的時候循環(huán)跳轉(zhuǎn)到RET處,連End都不會輸出,如果是break,還能輸出End*/
if ( m == 8 )
{
goto RET;
}
printf(" %d",m);
}
printf ("End");
RET:
return;
}
當(dāng)然是可以的,你沒有用但編譯生成的匯編語言中會用到。
for ( i=0;i<10;i++ ) x++;可以寫成
i=0;
LOOP:
if ( i<10 ) { x++; i++; goto LOOP; }
只不過后一種寫法不利于讀懂程序,兩者在匯編層次上是差不多滴
限制使用goto是結(jié)構(gòu)化程序設(shè)計的原則之一,goto過多會使程序混亂,流程不清
最根本原因是,goto是無條件直接跳轉(zhuǎn),這樣當(dāng)程序復(fù)雜時代碼條理就極易混亂!
并不是說不能用,而是盡量避免不要用,會破壞C語言的結(jié)構(gòu),而且可能使程序顯得比較亂
為什么不讓用goto函數(shù)
談不上不讓用,只是這種跳轉(zhuǎn)語言會破壞結(jié)構(gòu)化,使程序看起來不優(yōu)雅,不容易讀 其實只要能解決問題,沒什么不可以用的 比如vb語言中的錯誤處理,使用標(biāo)簽,本質(zhì)上就是用了goto 有些不支持循環(huán)退出的語言,也只能用goto退出,除非修改程序的邏輯設(shè)計,有時費這勁考慮避免使用goto,得不償失 ...
c#常用循環(huán)語句基本結(jié)構(gòu)是什么
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計中最能發(fā)揮計算機特長的程序結(jié)構(gòu),C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do –while循環(huán)和for循環(huán)。四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因為強制改變程序的順序...
為什么C語言中不提倡使用goto語句?僅僅是因為可讀性差嗎?
C語言是面向過程的語言,在編程的時候,一般會遵從結(jié)構(gòu)化程序設(shè)計的要求。結(jié)構(gòu)化程序設(shè)計要求模塊單入口,單出口,而goto語句則容易破壞這種結(jié)構(gòu),所以不建議使用。但這并不是強制的,只是一種建議,有時goto可以大幅度簡化代碼量,在保證代碼足夠清晰明確下,偶爾使用也是可以的。
為什么都不建議用goto語句進行跳轉(zhuǎn)呢?
:)。語句標(biāo)號起標(biāo)識語句的作用,與goto 語句配合使用。如: label: i++;loop: while(x<7);C語言不限制程序中使用標(biāo)號的次數(shù),但各標(biāo)號不得重名。goto語句的語義是改變程序流向, 轉(zhuǎn)去執(zhí)行語句標(biāo)號所標(biāo)識的語句。goto語句通常與條件語句配合使用。可用來實現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán),跳出循環(huán)體等功能。
C語言如何正確使用Goto語句?
用goto語句則比較合理。【例6.1】用goto語句和if語句構(gòu)成循環(huán),main(){ int i,sum=0;i=1;loop: if(i<=100){sum=sum+i; i++; goto loop;} printf("%d\\n",sum);} 有什么加我387700806。切記不要亂用。少用!
c 語言goto語句死循環(huán)
..另外goto語句的用法就是 goto+標(biāo)志, 如題中例子 num就是"標(biāo)志",當(dāng)執(zhí)行到goto的時候,會直接跳到"標(biāo)志"的地方,在標(biāo)志處繼續(xù)向下執(zhí)行..c中的這個用法很常見,比如執(zhí)行到某個地方用"goto"跳到另外一個地方接著執(zhí)行.然后再用"goto"跳回來..注:其中的標(biāo)志可以任意設(shè)置,標(biāo)志之間名字盡量不要重復(fù)....
在C語言中g(shù)oto結(jié)構(gòu)在什么情況下可以極大的優(yōu)化程序??在什么情況下會使...
goto語句可以讓程序的可讀性極大的降低,所以不建議使用,只有在萬不得已的情況下使用.
VBA,GOTO的行號雖然可以是中文,但這樣做會不會產(chǎn)生弊端?
中文不會,能找到行號就證明可以用。英文操作系統(tǒng)有可能會有問題,英文操作系統(tǒng)一般使用0~127的ascii碼,漢字使用128~255的ascii碼。
C語言中g(shù)oto的用法
深入探討C語言中的goto語句:必要性與用法 在C語言的學(xué)習(xí)旅程中,我們通常在探討分支語句和循環(huán)結(jié)構(gòu)時,才會邂逅goto這個獨特的詞匯。有些人不禁會問:在現(xiàn)代編程中,我們是否真的需要理解和掌握goto?答案就隱藏在黑格爾的名言中:“存在即合理。”盡管在日常開發(fā)中,goto的使用并不常見,但在特定領(lǐng)域,...
C語言loop: 這個什么意思?goto loop;
這個例子來說吧:loop: A語句;...(其他語句)goto loop;則goto loop表示程序轉(zhuǎn)去執(zhí)行l(wèi)oop標(biāo)記的那個語句!
相關(guān)評說:
嘉善縣中間: ______ 不允許.只能從內(nèi)向外goto 或 break, 不能從外向內(nèi)goto.
嘉善縣中間: ______ 當(dāng)一個分支滿足什么條件的時候,需要跳到程序的某個部分開始執(zhí)行 可以用GOTO 比如: loop:......; ........; if(...) ....; else goto loop; 如果滿足if里面的條件這執(zhí)行if下面的語句,如果不滿足,跳回if上面開始執(zhí)行.
嘉善縣中間: ______ goto語句可以用于任何語句間的跳轉(zhuǎn). 如:這是在循環(huán)體中的應(yīng)用. #include <stdio.h> int main() { int i, j; for ( i = 0; i < 10; i++ ) { printf( "Outer loop executing. i = %d\n", i ); for ( j = 0; j < 2; j++ ) { printf( " Inner loop executing. j = %d\n", j ); ...
嘉善縣中間: ______ GOTO語句為無條件轉(zhuǎn)向語句.結(jié)構(gòu)化程序設(shè)計方法主張限制性使用GOTO語句,因為濫用GOTO語句將使程序流程無規(guī)律,可讀性差.
嘉善縣中間: ______ 這個題目要求使用 goto 來實現(xiàn)循環(huán),其實是違反了“結(jié)構(gòu)化程序設(shè)計”的原則. 不過實現(xiàn)起來確實很簡單,在以下所示位置加上 loop: 和 goto loop: 就可以了. main() { char c; clock_t start, end; time_t a, b; double var; int i, guess; srand(...
嘉善縣中間: ______ 少了個頭文件和取地址符,還有函數(shù)初始化位置不對,下面是正確的程序,最后說一句,在c語言中盡量不要使用goto語句,因為這個語句會限制人們的思想的 #include<stdio.h> #include <stdlib.h> #include <time.h> main() { int i,n[4]...
嘉善縣中間: ______ goto語句以及用goto語句構(gòu)成循環(huán) goto語句是一種無條件轉(zhuǎn)移語句, 與BASIC中的goto語句相似.goto 語句的使用格式為: goto 語句標(biāo)號;其中標(biāo)號是一個有效的標(biāo)識符,這個標(biāo)識符加上一個“:”一起出現(xiàn)在函數(shù)內(nèi)某處, 執(zhí)行g(shù)oto語句后,...
嘉善縣中間: ______ go to 是轉(zhuǎn)向語句,按其英文含義就可理解 用法 標(biāo)號: 語句; go to 標(biāo)號; 或者 go to 標(biāo)號; 標(biāo)號: 語句; 標(biāo)號和goto必須包括處于同一個函數(shù)內(nèi) 標(biāo)號的寫法跟變量名一樣不能和關(guān)鍵詞相同,后面必須帶冒號 當(dāng)程序執(zhí)行到go to這個語句時,程序就轉(zhuǎn)跳到標(biāo)號后面的語句去了 例 int x=1; 語句1: x=x+1; if(x<100) goto 語句2; cout<<"x=100"<
嘉善縣中間: ______ #include <stdio.h> int main(void) { goto c2; c1: printf("1\n"); c2: printf("2\n"); return 0; } 盡量少用goto,因為它會破壞結(jié)構(gòu)化設(shè)計風(fēng)格,還經(jīng)常帶來錯誤或隱患.