do while循环的一个小问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 03:08:20
do{
printf("Enter a letter:");
gets(s);
if(!root)
root=create_btree(root,root,*s);
else
create_btree(root,root,*s);
}while(*s);
我怎么觉得有问题啊,如果*s不为零时do才能循环,那么当*s为零时,怎么办?我是说,要运行两句do里面的才能得到s的内容,而如果得到的是零,那么就不能运行啊,可是要是知道是零了,那已经运行了两句了啊。。。矛盾
如果要先运行一次循环体,那么不也运行了那里面的函数了么?
那不就真的破坏了前提么?
难道它先运行一下再销毁它之前运行的?
还是它只运行到gets(s)发现不对就停了???
二楼的,我想问,如果是这样的话,那么如果我第一次就给*s输入0值,它也运行了?

相对于这仅有的一次,不是矛盾么?
怪就怪在它有条件,但是条件是在执行的中途才输入进去的
也就是说不管怎样都会执行
do里面有个gets(s),而s的值又是要判断的。这是我问的关键地方

在do-while里先运行while前面的语句,然后判断是否执行第二次循环。也就是说,第一次是无条件执行的,以后的循环是要有条件判断的。
对于循环体内还套着分支结构,第一次运行while就是失效的,真正起作用的是do-while里判断。

补充:
如果你想开始就判断,那就用
while do循环
那么在第一次执行do部分前也会先检测while条件

do while 结构是第一次先执行do部分一次,以后每次先判断while部分,才决定执行或者不执行do部分
do部分是一个整体,不是说执行到某一步中间停了

不论你开始给s什么值,循环总是要运行的,运行后判断s是否为0,若不为零继续下一次循环,如果为零,跳出循环。

do while 必定先运行一次循环体才会判断!

do-while循环至少要执行循环体一次,与while 循环不同.

do while 必定先运行一次循环体才会判断!