c语言中 go to语句的使用方法

Python014

c语言中 go to语句的使用方法,第1张

goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。

如: label: i++

loop: while(x<7)

goto loop

C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句。

goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。

扩展资料:

go to在C语言中的应用:

统计从键盘输入一行字符的个数。

#include<stdio.h>

int n=0

int main(void) {

    printf("input a string: ")

      loop: if (getchar()!='\n') {

        n++

     goto loop

    }

printf("output: %d\n",n)

}

例如输入:abcdefghijklmnopqrstuvwxyz

然后回车Enter

输出:26

本例用if语句和goto语句构成循环结构。当输入字符不为'\n'时即执行n++进行计数。

然后转移至if语句循环执行,直至输入字符为'\n'才停止循环。

参考资料:百度百科-go to 语句

简而言之就是先画一个状态图,然后根据图来编码就行一个简单的xml的词法分析器供参考#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct{char*pintlen}xml_Texttypedefenum{xml_tt_U,/*Unknow*/xml_tt_H,/*Head<?xxx?>*/xml_tt_E,/*End</xxx>*/xml_tt_B,/*Begin<xxx>*/xml_tt_BE,/*BeginEnd<xxx/>*/xml_tt_T/*Textxxx*/}xml_TokenTypetypedefstruct{xml_Texttextxml_TokenTypetype}xml_Tokenintxml_initText(xml_Text*pText,char*s){pText->p=spText->len=strlen(s)return0}intxml_initToken(xml_Token*pToken,xml_Text*pText){pToken->text.p=pText->ppToken->text.len=0pToken->type=xml_tt_Ureturn0}intxml_print(xml_Text*pText){intifor(i=0i<pText->leni++){putchar(pText->p[i])}return0}intxml_println(xml_Text*pText){xml_print(pText)putchar('\n')return0}intxml_getToken(xml_Text*pText,xml_Token*pToken){char*start=pToken->text.p+pToken->text.lenchar*p=startchar*end=pText->p+pText->lenintstate=0pToken->text.p=ppToken->type=xml_tt_Ufor(p<endp++){switch(state){case0:switch(*p){case'<':state=1breakdefault:state=7break}breakcase1:switch(*p){case'?':state=2breakcase'/':state=4breakdefault:state=5break}breakcase2:switch(*p){case'?':state=3breakdefault:state=2break}breakcase3:switch(*p){case'>':pToken->text.len=p-start+1pToken->type=xml_tt_Hreturn1default:state=-1break}breakcase4:switch(*p){case'>':pToken->text.len=p-start+1pToken->type=xml_tt_Ereturn1default:state=4break}breakcase5:switch(*p){case'>':pToken->text.len=p-start+1pToken->type=xml_tt_Breturn1case'/':state=6breakdefault:state=5break}breakcase6:switch(*p){case'>':pToken->text.len=p-start+1pToken->type=xml_tt_BEreturn1default:state=-1break}breakcase7:switch(*p){case'<':p--pToken->text.len=p-start+1pToken->type=xml_tt_Treturn1default:state=7break}breakdefault:pToken->text.len=p-start+1pToken->type=xml_tt_Treturn1}}return0}intmain(){intret=0xml_Textxmlxml_initText(&xml,"<?xml?><root>ss<haha>hoho</haha></root>")xml_Tokentokenxml_initToken(&token,&xml)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)ret=xml_getToken(&xml,&token)printf("ret=%dtext=",ret)xml_print(&token.text)printf("type=%d\n\n",token.type)return0}