Dalam bahasa C, pernyataan goto dipanggil pernyataan pemindahan tanpa syarat, yang membenarkan pemindahan kawalan tanpa syarat kepada pernyataan berlabel dalam fungsi yang sama; , di mana label boleh menjadi sebarang teks biasa kecuali kata kunci C, dan ia boleh ditetapkan sebelum atau selepas pernyataan goto dalam program C.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi c99, komputer Dell G3.
pernyataan goto, juga dikenali sebagai pernyataan pemindahan tanpa syarat dalam C, dikatakan tidak bersyarat, tetapi sebenarnya ia masih bersyarat, dan julat lompat masih Terhad, membenarkan pemindahan kawalan tanpa syarat kepada pernyataan bertanda dalam fungsi yang sama.
Sintaks
Sintaks pernyataan goto dalam bahasa C:
goto label; .. . label: statement;
Di sini, label boleh berupa sebarang kata kunci tulen kecuali Teks kata kunci C, yang boleh ditetapkan sebelum atau selepas pernyataan goto dalam program C.
Carta Aliran
Pertama, kita perlu tentukan Nah, di mana kita ingin memindahkan, yang merupakan titik akhir pemindahan, kita perlu menetapkan pengecam, iaitu label (saya tidak menunjukkan bahasa Inggeris. Apabila ralat berlaku dalam pernyataan goto, perkataan ini mungkin muncul dalam kandungan ralat). Pada masa yang sama, kita perlu menambah titik bertindih (:) selepas label Dengan cara ini, kita telah menetapkan pengecam, dan kemudian kita menetapkan titik permulaan - pengecam goto;. Mula-mula kita perlu memberitahu komputer bahawa kita akan melompat, yang merupakan peranan goto Kemudian kita perlu memberitahunya di mana kita mahu melompat, yang merupakan pengecam yang baru kita tetapkan, seperti pernyataan lain, kita menambah mata kepadanya (;) bermaksud akhir pernyataan. Inilah rupa halaman editor.
dan keputusan yang sedang dijalankan
Ia boleh dilihat bahawa printf kami dalam baris 5 tidak dilaksanakan, dan ia pergi terus ke baris 7 printf.
Ia boleh melompat ke pernyataan seterusnya atau ke hadapan.
Dengan cara ini ia menjadi gelung mudah tanpa syarat penghujung
Anda boleh cuba jalankan ini Untuk sekeping kod, sudah tentu kita boleh menggunakan kaunter dan menambah jika penghakiman, memberikannya syarat akhir, dan biarkan ia mempunyai keupayaan untuk dan sementara.
Malangnya, kami tidak boleh menggunakan goto merentas fungsi. Terdapat kenyataan lain yang boleh dilaksanakan, jadi kami tidak akan menerangkan secara terperinci di sini.
Di sini, jika keadaan if adalah benar, selepas kita mengeluarkannya, melihat rentetan panjang kurungan tidak sekata di bawah, saya tahu apa yang saya mahu lakukan Mereka menetapkan syarat di sana , dan kemudian putus lagi dan lagi Menjengkelkan untuk memikirkannya. Bagaimana saya boleh menunggu tanpa goto pada masa ini. Tidak lama lagi! Kami terus pergi dan melompat ke
untuk meneruskan ke peringkat seterusnya program kami.
Tetapi saya tertanya-tanya jika anda perasan bahawa dalam gambar sebelumnya, kami menggunakan dua goto, tetapi mereka menunjuk pada label yang sama Ya, kami boleh membuat program melompat pada titik permulaan yang berbeza. tetapi harus diingat bahawa kita tidak boleh melompat ke dua label di bawah goto yang sama Ini mudah difahami Jika anda, menerima pesanan yang meminta anda pergi ke dua atau lebih tempat yang berbeza, Anda juga akan keliru, di mana. patutkah saya pergi?
Satu lagi perbezaan daripada sebelum ini ialah saya menambah koma bertitik (;) selepas pengecam xiayige: Mengapa ini? Pengecam mesti diikuti dengan pernyataan, yang boleh menjadi tugasan atau pernyataan Tetapi jika benar-benar tiada cara untuk menambah pernyataan selepasnya, kita boleh menambah koma bertitik dan menganggapnya sebagai pernyataan kosong untuk membuat pengecam dijalankan.
Ps: Sebenarnya, anda boleh mengisytiharkan pembolehubah sampah di sini, atau kenyataan lain yang tidak bermakna, tetapi ia akan menyukarkan kod untuk difahami, dan tidak disyorkan untuk berbuat demikian.
Ini adalah yang paling banyak digunakan oleh semua orang. Bagi kegunaan lain, ia bergantung pada imaginasi anda.
Berikut ialah apabila saya menggunakan 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视频教程》
Atas ialah kandungan terperinci Apakah maksud pernyataan goto dalam bahasa c. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!