ホームページ  >  記事  >  バックエンド開発  >  C言語のgoto文の意味は何ですか?

C言語のgoto文の意味は何ですか?

青灯夜游
青灯夜游オリジナル
2022-12-22 18:00:5515970ブラウズ

C 言語では、goto ステートメントは無条件転送ステートメントと呼ばれ、同じ関数内のラベル付きステートメントに無条件で制御を移すことができます。構文は「goto label;...label:statement」です。 ;"、ここで、ラベルは C キーワードを除く任意のプレーン テキストにすることができ、C プログラムの goto ステートメントの前後に設定できます。

C言語のgoto文の意味は何ですか?

#このチュートリアルの動作環境: Windows7 システム、C99 バージョン、Dell G3 コンピューター。

C 言語の goto ステートメント

goto ステートメントは、C では無条件転送ステートメントとも呼ばれます。無条件であると言われていますが、実際には条件付きです。ジャンプ範囲は制限されたままなので、同じ関数内のマークされたステートメントに無条件で制御を移すことができます。

文法

C 言語の goto ステートメントの構文:

goto label;
..
.
label: statement;

ここで、ラベルには C キーワードを除く任意のプレーン テキストを指定できます。 C プログラムの goto ステートメントの前後に設定します。

C言語のgoto文の意味は何ですか?

フローチャート

C言語のgoto文の意味は何ですか?

使用法

まず、次のことを決定する必要があります。さて、転送したい場所、つまり転送の終点には、識別子、つまりラベルを設定する必要があります(英語は示していませんが、goto文がエラーになると、この単語が表示される可能性があります)エラー内容)、同時にラベルの後にコロン (:) を追加する必要があります。このようにして識別子を設定し、次に開始点である goto 識別子を設定します。まず、ジャンプすることをコンピュータに伝える必要があります (これが goto の役割です。次に、ジャンプする場所をコンピュータに伝える必要があります。これは、設定したばかりの識別子です。最後に、他のステートメントと同様に、ポイントを追加します) (;) はステートメントの終わりを意味します。エディターページは次のようになります。

C言語のgoto文の意味は何ですか?

と実行結果

C言語のgoto文の意味は何ですか?

5 行目の printf が実行されていないことがわかります。直接 7 行目の printf に進みます。

次のステートメントにジャンプしたり、先頭にジャンプしたりできます。

C言語のgoto文の意味は何ですか?

このようにして、終了条件のない単純なループになります。

C言語のgoto文の意味は何ですか?

これを実行してみてください。もちろん、カウンターを使用して if 判定を追加し、終了条件を与え、for と while の機能を持たせることもできます。

残念ながら、関数間で goto を使用することはできません。実装できるステートメントは他にもあるため、ここでは詳しく説明しません。

C言語のgoto文の意味は何ですか?

ここで、if 条件が true の場合、それを出力した後、以下の不均等な括弧の長い文字列を見ると、何をしたいのかがわかります。そこで条件が設定されます。と何度も壊れてしまうのですが、考えるのも面倒です、この時gotoなしで待つにはどうしたらいいでしょうか?もうすぐです!プログラムの次の段階に進むために、

C言語のgoto文の意味は何ですか?

に直接移動してジャンプします。

しかし、前の図では 2 つの goto を使用しましたが、それらは同じラベルを指していることに気づいたでしょうか。はい、プログラムを異なる開始点から同じ終了点にジャンプさせることができます。ただし、同じ goto で 2 つのラベルにジャンプすることはできないことに注意してください。これは簡単に理解できます。もしあなたが 2 つ以上の別の場所に行くように要求されると、混乱するでしょう。私は行ったほうが良いですか?

前とのもう 1 つの違いは、識別子 xiayige: の後にセミコロン (;) を追加したことです。これはなぜですか?識別子の後には、代入またはステートメントのステートメントが続く必要があります。ただし、その後にステートメントを追加する方法がない場合は、セミコロンを追加して空のステートメントとして扱い、識別子を実行できます。

Ps: 実際、ここでガベージ変数やその他の無意味なステートメントを宣言することもできますが、コードが理解しにくくなるため、お勧めできません。

これは、goto で誰もが最もよく行うことです。他の用途については、あなたの想像力に依存します。古いことわざにあるように、人の大胆さ、土地の生産性が重要です。

以下は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==&#39;=&#39;)
    printf("**,你算**呢\n");
    }
loop:
    while(ysf!=&#39;=&#39;)
    {
        if (ysf==&#39;-&#39;)
        {
            printf("请输入数字\n");
            scanf("%d",&sz);
            jieguo-=sz;
            printf("请输入运算符\n");
            fflush(stdin);//清空标准输入流(stdin) fflush是stdio.h中的函数
            scanf("%c",&ysf);
            if(ysf==&#39;=&#39;)
            {
                goto jieshu;
            }
            else
            {
                goto loop;
            }
        }
        else if (ysf==&#39;+&#39;)
        {
            printf("请输入数字\n");
            scanf("%d",&sz);
            jieguo+=sz;
            printf("请输入运算符\n");
            fflush(stdin);//清空标准输入流(stdin) fflush是stdio.h中的函数
            scanf("%c",&ysf);
            if(ysf==&#39;=&#39;)
            {
                goto jieshu;
            }
            else
            {
                goto loop;
            }
        }
        else if(ysf==&#39;*&#39;)
        {
            printf("请输入数字\n");
            scanf("%d",&sz);
            jieguo*=sz;
            printf("请输入运算符\n");
            fflush(stdin);//清空标准输入流(stdin) fflush是stdio.h中的函数
            scanf("%c",&ysf);
            if(ysf==&#39;=&#39;)
            {
                goto jieshu;
            }
            else
            {
                goto loop;
            }        }
        else if(ysf==&#39;/&#39;)
        {
            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==&#39;=&#39;)
            {
                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视频教程

以上がC言語のgoto文の意味は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。