中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言中goto語句怎么使用

發布時間:2022-12-27 09:04:22 來源:億速云 閱讀:498 作者:iii 欄目:編程語言

這篇文章主要介紹“c語言中goto語句怎么使用”,在日常操作中,相信很多人在c語言中goto語句怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”c語言中goto語句怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在c語言中,goto語句被稱為無條件轉移語句,允許把控制無條件轉移到同一函數內的被標記的語句;語法“goto label;...label: statement;”,其中label可以是任何除C關鍵字以外的純文本,它可以設置在C程序中goto語句的前面或者后面。

c語言 goto語句

goto語句,在C中又被稱為無條件轉移語句,說是無條件,其實還是有條件的,跳轉范圍還是有限制的,允許把控制無條件轉移到同一函數內的被標記的語句。

語法

C 語言中 goto 語句的語法:

goto label;
..
.
label: statement;

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

c語言中goto語句怎么使用

流程圖

c語言中goto語句怎么使用

用法

首先,我們要確定好我們要轉移去的地方,也就是轉移終點,需要我們去設置一個標識符,也就是label(我沒有在秀英語,當goto語句出錯的時候,報錯內容很有可能會出現這個單詞),同時,我們要在label后面加一個冒號(:),就這樣,我們設置好了標識符,接下來我們設置起點——goto 標識符;。首先我們要告訴計算機,我們要跳了,就是goto的作用,接著我們要告訴他我們要跳去哪里,也就是我們剛剛設置好的標識符,最后像是其他語句一樣,我們給它加上分號(;),意味著語句結束。下面是編輯器頁面的樣子。

c語言中goto語句怎么使用

以及運行結果

c語言中goto語句怎么使用

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

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

c語言中goto語句怎么使用

這樣他就成了一個簡便的循環,沒有結束條件

c語言中goto語句怎么使用

大家可以試試跑一下這段代碼,當然我們可以用計數器加if判斷,給他一個結束條件,讓他擁有for和while的能力。

可惜的是我們沒辦法跨函數運用goto,有其他語句可以實現,我們在此不再贅述。

c語言中goto語句怎么使用

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

c語言中goto語句怎么使用

去進行我們下一階段的程序。

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

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

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

以下是我用到goto的時候。

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

說明

在任何編程語言中,都不建議使用 goto 語句。因為它使得程序的控制流難以跟蹤,使程序難以理解和難以修改。任何使用 goto 語句的程序可以改寫成不需要使用 goto 語句的寫法。

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

①由于goto語句是無條件跳轉指令,使用goto語句后回使得程序結構變得更加復雜,不利于以后代碼維護,特別是需要交交接給被人維護的時候。

②由于目前編程采用的都是結構化編程,方便移植,而當采用goto語句后就會導致在結構化編程的項目中代碼不便移植,因為如果使用goto從一個結構中跳轉到另一個結構,而使得結構之間有了聯系,不便移植。

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

推薦使用goto的場景:

①從多重循環中直接跳出。

②出錯時清除資源。

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

使用goto函數的原則:

①使用goto語句只能goto到同一函數內,而不能從一個函數里goto到另外一個函數里。

②使用goto語句在同一函數內進行goto時,goto的起點應是函數內一段小功能的結束處,goto的目的label處應是函數內另外一段小功能的開始處,不能破壞功能的實現。

③不能從一段復雜的執行狀態中的位置goto到另外一個位置,比如,從多重嵌套的循環判斷中跳出去就是不允許的。 

④應該避免向兩個方向跳轉。這樣最容易導致"面條代碼",即邏輯混亂。

到此,關于“c語言中goto語句怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛教| 衡东县| 城固县| 闵行区| 长兴县| 淳安县| 富阳市| 蒙自县| 光泽县| 昌吉市| 芜湖市| 巴青县| 新巴尔虎右旗| 昌平区| 龙山县| 乐都县| 娄底市| 吴堡县| 静乐县| 平湖市| 栾川县| 义马市| 岳阳县| 溆浦县| 慈溪市| 永定县| 克山县| 买车| 屏东县| 青河县| 改则县| 南宁市| 农安县| 高尔夫| 龙川县| 诸城市| 金山区| 屏山县| 望奎县| 台山市| 温泉县|