c语言do while语句

人气:468 ℃/2023-02-07 14:27:22

c语言do while语句是什么呢?不知道的小伙伴来看看小编今天的分享吧!

do-while循环的格式:

do{

Statement _1;

Statement _2;

}while(Exp_cntrl);//分号不可丢

当循环体为一条简单语句时,可以省略 {},即:

do

Simp1e_Statement;//循环体

while(Exp_cntrl);

注意,在 do-while 结构中,while 括号后的分号不能丟。

do-while 循环的执行流程是:首先无条件地执行一次循环体,然后再根据循环控制表达式的值来判断是否继续执行循环体。若为真,则继续执行;若为假,则停止执行,退出 do-while 循环。也就是说,do-while 循环至少执行一次循环体。

do-while 循环和 while 循环的主要差别是:前者至少执行一次循环体,后者有可能一次也不执行循环体。

do-while 循环的执行流程图:

do-while 循环主要用在一直进行尝试性的操作,直到满足条件为止的情景。

【例】编程实现猜数字游戏,假设谜底为 0〜10 的整数,猜谜者每次输入一个整数,直到猜对为止。

分析:本题属于先输入所猜数字才能判断是否猜中,如果猜中,游戏结束,如果没猜中,继续猜,直到猜中为止。故该题符合 do-while 循环的使用场景。

代码如下:

#include<stdio.h>

int main (void){undefined

int pwd=7,gs; //pwd:谜底

printf ("\tGames Begin\n");

do{undefined

printf("Please guess (0~10):");

scanf("%d",&gs);

}while(gs!=pwd);

printf ("\tSucceed!\n");

printf ("\tGaines over\n");

return 0;

}

运行结果:

Games Begin

Please guess (0~10):3

Please guess (0~10):5

Please guess (0~10):8

Please guess (0~10):7

Succeed!

Gaines over

以上就是小编今天的分享了,希望可以帮助到大家。

c语言do while语句的用法

C语言新手绝对不知道的do{...}while(0)的秒用

C语言中do{...}while(0)的秒用

今天看了些有关do{...}while(0)秒用的文章,觉得写的很好,这里总结下分享给大家。

这里分享的有3个用法,分别是:

1.避免空的宏定义在编译时出现warning。

2.多个语句一起,定义成一个宏时,增加代码适应(特别是条件语句调用这类宏要注意)

3.避免部分goto语句的使用

1.避免空的宏定义在编译时出现warning

//例如:

#define foo() do{}while(0)

2.多个语句一起,定义成一个宏时,增加代码适应(特别是条件语句调用这类宏要注意),以下if(0)和if(1)在实际应用时是if(表达式),表示表达式假和真。

//例如:一个宏包含以下两个语句,

#define foo()

fun1();

fun2;

编译器预处理的时候

if(1)foo();

//此时就相当于下面的语句,

if(0)fun1();

fun2();//逻辑上多执行的代码,会导致系统BUG

;//逻辑上多执行的代码

如果使用do{...}while(0)就可以解决上面的问题

#define foo()

do{

fun1();

fun2();

}while(0)

//对于下面的语句

if(0) foo();

//编译后的执行如下:

if(0) do{

fun1();

fun2();

}while(0);

这样就不会出现上面那种有逻辑上不该执行的代码被执行的问题。当然这里也可以用其他方法避免这个问题,比如加大括号{}

#define foo() {fun1();fun2;}

编译器会预处理下面语句

if(0) foo();

//编译后的执行如下:

if(0) {

fun1();

fun2();

}

;//会多个;号,但是也没有逻辑上的问题

语句块宏定义时注意的就是这些,另外在写if语句时,尽量后面要加大括号,避免出错,例如上面的if(0){foo();},加上大括号{}也不会有问题。

3.避免部分goto语句的使用

//例如:如果一个函数要分配一些资源,然后中途遇到错误,要退出函数,退出前要释放资源,代码结构可能如下:

bool foo(){

int *p = (int*)malloc(5*sizeof(int));

bool bOk = true;

//执行并处理错误

bOk = fun1();

if(!bOk){

free(p);

p=NULL;

return false;

}

bOk = fun2();

if(!bOk){

free(p);

p=NULL;

return false;

}

bOk = fun3();

if(!bOk){

free(p);

p=NULL;

return false;

}

//......

//执行成功,释放资源并返回ture

free(p);

p = NULL;

return true;

}

这里就觉得很多代码冗余,然而使用沟通可以很好的解决冗余的部分,代码如下:

bool foo(){

int *p = (int*)malloc(5*sizeof(int));

bool bOk = true;

//执行并处理错误

if(!fun1()) goto errorlable;

if(!fun2()) goto errorlable;

if(!fun3()) goto errorlable;

//......

//执行成功,释放资源并返回ture

free(p);

p = NULL;

return true;

//冗余部分的,错误返回代码

errorlable:

free(p);

p = NULL;

return false;

}

然后C语言中过多的使用goto语句会提高程序的灵活性,繁杂点的程序会让程序员捉摸不定,程序跳来跳出,难以捉摸,容易逻辑上产生混淆从而出现BUG。对于上面的这种情况使用do{...}while(0)就可以很好的解决这些跳来跳出的问题,代码结构如下:

bool foo(){

//分配资源

int *p = (int*)malloc(5*sizeof(int));

bool bOk = true;

//执行并处理错误

do{

bOk = fun1();

if(!bOk)break;

bOk = fun2();

if(!bOk)break;

bOk = fun3();

if(!bOk)break;

//......

}while(0);

//释放资源并返回bOk

free(p);

p = NULL;

return bOk;

}

推荐

首页/电脑版/网名
© 2026 NiBaKu.Com All Rights Reserved.