亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    c語言中g(shù)oto語句的含義是什么

    在c語言中,goto語句被稱為無條件轉(zhuǎn)移語句,允許把控制無條件轉(zhuǎn)移到同一函數(shù)內(nèi)的被標(biāo)記的語句;語法“goto label;…label: statement;”,其中l(wèi)abel可以是任何除C關(guān)鍵字以外的純文本,它可以設(shè)置在C程序中g(shù)oto語句的前面或者后面。

    c語言中g(shù)oto語句的含義是什么

    本教程操作環(huán)境:windows7系統(tǒng)、c99版本、Dell G3電腦。

    c語言 goto語句

    goto語句,在C中又被稱為無條件轉(zhuǎn)移語句,說是無條件,其實(shí)還是有條件的,跳轉(zhuǎn)范圍還是有限制的,允許把控制無條件轉(zhuǎn)移到同一函數(shù)內(nèi)的被標(biāo)記的語句。

    語法

    C 語言中 goto 語句的語法:

    goto label; .. . label: statement;
    登錄后復(fù)制

    在這里,label 可以是任何除 C 關(guān)鍵字以外的純文本,它可以設(shè)置在 C 程序中 goto 語句的前面或者后面。

    c語言中g(shù)oto語句的含義是什么

    流程圖

    c語言中g(shù)oto語句的含義是什么

    用法

    首先,我們要確定好我們要轉(zhuǎn)移去的地方,也就是轉(zhuǎn)移終點(diǎn),需要我們?nèi)ピO(shè)置一個(gè)標(biāo)識符,也就是label(我沒有在秀英語,當(dāng)goto語句出錯(cuò)的時(shí)候,報(bào)錯(cuò)內(nèi)容很有可能會出現(xiàn)這個(gè)單詞),同時(shí),我們要在label后面加一個(gè)冒號(:),就這樣,我們設(shè)置好了標(biāo)識符,接下來我們設(shè)置起點(diǎn)——goto 標(biāo)識符;。首先我們要告訴計(jì)算機(jī),我們要跳了,就是goto的作用,接著我們要告訴他我們要跳去哪里,也就是我們剛剛設(shè)置好的標(biāo)識符,最后像是其他語句一樣,我們給它加上分號(;),意味著語句結(jié)束。下面是編輯器頁面的樣子。

    c語言中g(shù)oto語句的含義是什么

    以及運(yùn)行結(jié)果

    c語言中g(shù)oto語句的含義是什么

    可見,我們第5行printf沒有執(zhí)行,直接就來到了第7行printf。

    它可以跳到后面語句,也可以跳到前面。

    c語言中g(shù)oto語句的含義是什么

    這樣他就成了一個(gè)簡便的循環(huán),沒有結(jié)束條件

    c語言中g(shù)oto語句的含義是什么

    大家可以試試跑一下這段代碼,當(dāng)然我們可以用計(jì)數(shù)器加if判斷,給他一個(gè)結(jié)束條件,讓他擁有for和while的能力。

    可惜的是我們沒辦法跨函數(shù)運(yùn)用goto,有其他語句可以實(shí)現(xiàn),我們在此不再贅述。

    c語言中g(shù)oto語句的含義是什么

    在這里,如果if條件成立,我們在將它輸出之后,望著下面長長的一串層次不齊的中括號,我知道我要在他們那里設(shè)置條件,然后一遍又一遍的break,想想就煩,這時(shí)候不用goto更待何時(shí)?很快啊!我們直接一個(gè)goto,跳到了

    c語言中g(shù)oto語句的含義是什么

    去進(jìn)行我們下一階段的程序。

    但是不知你是否注意到,我們在上一張圖片中,用了兩個(gè)goto,卻讓他們指到了同一個(gè)label,是的,我們可以在不同的起點(diǎn)去讓程序跳轉(zhuǎn)到同一個(gè)終點(diǎn),但是要注意的是我們不可以在同一個(gè)goto下跳到兩個(gè)label,這很容易理解,換做是你,收到命令,叫你去兩個(gè)甚至多個(gè)不同的地方,你也會懵逼,我到底該去哪。

    另一個(gè)與之前不同的地方就是,我在標(biāo)識符xiayige:的后面加上了一個(gè)分號(;),這是為什么?標(biāo)識符的后面要跟一條語句才行,可以是賦值可以是聲明,但是如果實(shí)在沒有辦法在他后面加語句,我們可以加一個(gè)分號,當(dāng)作空語句,來讓這個(gè)標(biāo)識符運(yùn)行起來。

    Ps:其實(shí)可以在這里聲明一個(gè)垃圾變量,或者別的什么無意義的語句,但會使代碼變得不易懂,并不建議這么去做。

    這是大家用goto做的最多的事,至于有什么其他的用法,那就要看你的想象力了,老話說得好,人有多大膽,地有多大產(chǎn)。

    以下是我用到goto的時(shí)候。

    #include<stdio.h> int main () {     printf("請輸入要計(jì)算的算式,四則運(yùn)算優(yōu)先級一樣高,從左到右依次計(jì)算n");     int jieguo=0,sz,gongju=0,gongju2=1;     char ysf;     scanf("%d",&jieguo);     if (jieguo==0) //直接輸入等號的話%d似乎是0,有待商榷!?。。。。。。?//二次修改,if語句中判斷量時(shí)只有0為假,除此之外的數(shù)字都表真     {     printf("**,你算**呢n");     goto chaojijieshu;     gongju=1;     gongju2=0;     }     else if (gongju2)          {     printf("請輸入運(yùn)算符n");          scanf(" %c",&ysf);     //enter包含兩個(gè)命令,算是兩個(gè)字符r和n,后面的一個(gè)會占據(jù)scanf的輸入位,所以要清空,或者用空格占位     if(ysf=='=')     printf("**,你算**呢n");     } loop:     while(ysf!='=')     {         if (ysf=='-')         {             printf("請輸入數(shù)字n");             scanf("%d",&sz);             jieguo-=sz;             printf("請輸入運(yùn)算符n");             fflush(stdin);//清空標(biāo)準(zhǔn)輸入流(stdin) fflush是stdio.h中的函數(shù)             scanf("%c",&ysf);             if(ysf=='=')             {                 goto jieshu;             }             else             {                 goto loop;             }         }         else if (ysf=='+')         {             printf("請輸入數(shù)字n");             scanf("%d",&sz);             jieguo+=sz;             printf("請輸入運(yùn)算符n");             fflush(stdin);//清空標(biāo)準(zhǔn)輸入流(stdin) fflush是stdio.h中的函數(shù)             scanf("%c",&ysf);             if(ysf=='=')             {                 goto jieshu;             }             else             {                 goto loop;             }         }         else if(ysf=='*')         {             printf("請輸入數(shù)字n");             scanf("%d",&sz);             jieguo*=sz;             printf("請輸入運(yùn)算符n");             fflush(stdin);//清空標(biāo)準(zhǔn)輸入流(stdin) fflush是stdio.h中的函數(shù)             scanf("%c",&ysf);             if(ysf=='=')             {                 goto jieshu;             }             else             {                 goto loop;             }        }         else if(ysf=='/')         {             printf("請輸入數(shù)字n");             scanf("%d",&sz);             while(sz==0)             {                 printf("0能做分母嗎?你算**呢n");             }             jieguo/=sz;             printf("請輸入運(yùn)算符n");             fflush(stdin);//清空標(biāo)準(zhǔn)輸入流(stdin) fflush是stdio.h中的函數(shù)             scanf("%c",&ysf);             if(ysf=='=')             {                 goto jieshu;             }             else             {                 goto loop;             }         }     } jieshu:     printf("結(jié)果是%dn",jieguo); chaojijieshu:     if (gongju)     printf("真無語,重開吧n");     return 0;      } //注意注意?。。。。。。。。。。。?//enter算是兩個(gè)命令,所以有兩個(gè)字符,在進(jìn)行上一次輸入之后 //在來一個(gè)enter,會占據(jù)scanf的字符位 //所以要清空標(biāo)準(zhǔn)輸入流 //可以利用下述語句 //fflush(stdin); //清空標(biāo)準(zhǔn)輸入流(stdin) fflush是stdio.h中的函數(shù) //以上是最好的解決辦法 //初次之外,還有被稱作偏方的辦法 //二次修改 除此之外,而不是初次之外,打錯(cuò)字了 //如 //scanf(“ %c”,&ysf”) //在scanf中加一個(gè)空格,可以頂?shù)鬳nter多出來的一個(gè)字符 //還有 //加一句 //getchar() //用getchar來捕捉多出來的n
    登錄后復(fù)制

    說明

    在任何編程語言中,都不建議使用 goto 語句。因?yàn)樗沟贸绦虻目刂屏麟y以跟蹤,使程序難以理解和難以修改。任何使用 goto 語句的程序可以改寫成不需要使用 goto 語句的寫法。

    不推薦使用goto語句的原因:

    ①由于goto語句是無條件跳轉(zhuǎn)指令,使用goto語句后回使得程序結(jié)構(gòu)變得更加復(fù)雜,不利于以后代碼維護(hù),特別是需要交交接給被人維護(hù)的時(shí)候。

    ②由于目前編程采用的都是結(jié)構(gòu)化編程,方便移植,而當(dāng)采用goto語句后就會導(dǎo)致在結(jié)構(gòu)化編程的項(xiàng)目中代碼不便移植,因?yàn)槿绻褂胓oto從一個(gè)結(jié)構(gòu)中跳轉(zhuǎn)到另一個(gè)結(jié)構(gòu),而使得結(jié)構(gòu)之間有了聯(lián)系,不便移植。

    ③由于目前C語言等高級語言具有break、continue等語法,可以很好地代替goto,所以能不使用goto就不使用goto。

    推薦使用goto的場景:

    ①從多重循環(huán)中直接跳出。

    ②出錯(cuò)時(shí)清除資源。

    ③可增加程序清晰度的情況。

    使用goto函數(shù)的原則:

    ①使用goto語句只能goto到同一函數(shù)內(nèi),而不能從一個(gè)函數(shù)里goto到另外一個(gè)函數(shù)里。

    ②使用goto語句在同一函數(shù)內(nèi)進(jìn)行g(shù)oto時(shí),goto的起點(diǎn)應(yīng)是函數(shù)內(nèi)一段小功能的結(jié)束處,goto的目的label處應(yīng)是函數(shù)內(nèi)另外一段小功能的開始處,不能破壞功能的實(shí)現(xiàn)。

    ③不能從一段復(fù)雜的執(zhí)行狀態(tài)中的位置goto到另外一個(gè)位置,比如,從多重嵌套的循環(huán)判斷中跳出去就是不允許的?!?/p>

    ④應(yīng)該避免向兩個(gè)方向跳轉(zhuǎn)。這樣最容易導(dǎo)致"面條代碼",即邏輯混亂。

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號