go n'est pas un mot-clé en langage C, goto est un mot-clé en langage C. L'instruction goto est appelée instruction de transfert inconditionnel, qui permet un transfert inconditionnel du contrôle vers une instruction étiquetée au sein de la même fonction ; la syntaxe est "goto label;...label: Statement;", où label peut être n'importe quelle instruction pure autre que le mot-clé C Text, qui peut être défini avant ou après l'instruction goto dans un programme C.
L'environnement d'exploitation de ce tutoriel : système Windows 7, version c99, ordinateur Dell G3.
Il y a un total de 32 mots-clés en langage C :
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
si | autre | switch | cas | par défaut | pause | retour | aller à |
faire | pendant que | pour | continue | typedef | struct | enum | union |
char | short | int | long | flotteur | double | void | taillede |
signé | non signé | const | auto | register | statique | externe | volatile |
On voit que go n'est pas un mot-clé en langage C, mais goto est un mot-clé en langage C.
l'instruction goto, également connue sous le nom d'instruction de transfert inconditionnel en C, est dite inconditionnelle, mais en fait elle est toujours conditionnelle. La plage de saut est toujours limitée, permettant un transfert inconditionnel de contrôle vers. le même Une instruction marquée dans une fonction.
Grammar
La syntaxe de l'instruction goto en langage C :
goto label; .. . label: statement;
Ici, l'étiquette peut être n'importe quel texte brut à l'exception du mot-clé C, et elle peut être définie avant ou après l'instruction goto dans le programme C.
Organigramme
Tout d'abord, nous devons déterminer où nous voulons transférer, quel est le point final du transfert, et nous devons définir un identifiant, qui est une étiquette ( Je n'ai pas montré l'anglais, lorsqu'une erreur se produit dans l'instruction goto, ce mot est susceptible d'apparaître dans le contenu de l'erreur). En même temps, nous devons ajouter deux points (:) après l'étiquette. nous avons défini l'identifiant, puis nous avons défini le point de départ ——goto identifier ;. Nous devons d'abord dire à l'ordinateur que nous allons sauter, ce qui est le rôle de goto. Ensuite, nous devons lui dire où nous voulons sauter, qui est l'identifiant que nous venons de définir. Enfin, comme pour les autres instructions, nous ajoutons des points. à cela (;) signifie la fin de l'instruction. Voici à quoi ressemble la page de l'éditeur.
et les résultats en cours d'exécution
On voit que notre 5ème ligne de printf n'a pas été exécutée, et nous sommes passés directement à la 7ème ligne de printf.
Il peut passer à l'instruction suivante ou passer au premier plan.
De cette façon, cela devient une simple boucle sans condition de fin
Vous pouvez essayer d'exécuter ce code. Bien sûr, nous pouvons utiliser le compteur et ajouter un jugement pour lui donner une condition de fin et laisser. il a la capacité de pendant et de temps.
Malheureusement, nous ne pouvons pas utiliser goto dans toutes les fonctions. Il existe d'autres instructions qui peuvent être implémentées, nous n'entrerons donc pas dans les détails ici.
Ici, si la condition if est vraie, après l'avoir affichée, en regardant la longue chaîne de parenthèses inégales ci-dessous, je sais que je dois définir les conditions sur celles-ci, puis le faire encore et encore. pause, c'est ennuyeux d'y penser. Comment puis-je attendre sans y aller à ce moment-là ? Très bientôt ! Nous allons directement à
pour passer à l'étape suivante de notre processus.
Mais je me demande si vous avez remarqué que dans la dernière image, nous avons utilisé deux gotos, mais ils pointaient vers la même étiquette. Oui, nous pouvons faire passer le programme au même point final à partir de points de départ différents, mais cela devrait l'être. a noté que nous ne pouvons pas accéder à deux étiquettes sous le même goto. C'est facile à comprendre. Si c'était vous et que vous receviez un ordre vous demandant d'aller à deux endroits différents ou même plus, vous seriez confus, où devriez-vous le faire. J'y vais?
Une autre différence par rapport à avant est que j'ai ajouté un point-virgule (;) après l'identifiant xiayige :. Pourquoi est-ce ? L'identifiant doit être suivi d'une instruction, qui peut être une affectation ou une instruction. Mais s'il n'y a vraiment aucun moyen d'ajouter une instruction après, nous pouvons ajouter un point-virgule et le traiter comme une instruction vide pour faire fonctionner l'identifiant.
Ps : En fait, vous pouvez déclarer ici une variable poubelle, ou d'autres déclarations dénuées de sens, mais cela rendra le code difficile à comprendre, et il n'est pas recommandé de le faire.
C'est ce que tout le monde utilise goto pour faire le plus. Quant aux autres utilisations, cela dépend de votre imagination, comme le dit le vieil adage, de l'audace d'une personne et de la productivité de la terre.
Ce qui suit correspond au moment où j'utilise 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
Recommandations associées : "Tutoriel vidéo C"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!