C语言中关于while的一个问题

puhjack 2009-01-16 10:20:41
初学c语言,遇到一个问题 while()语句 为真执行后面的语句
可是这句 while( select < 1 || select > 4 ) 却把范围控制在1-4间,select取-1或更小, 或者select取5或者取更大才为真(|| 只要一个是 1 就为真)。为什么却控制范围是1-4?
为何不写成这样 while( select >1 && select <4 ) 这样岂不是来得干脆。 麻烦各位帮帮忙,小弟谢过。
...全文
313 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
puhjack 2009-01-17
  • 打赏
  • 举报
回复
谢谢大家的帮助,可能大家都没有编译吧。编译后输入数字就绝对可以发现不一样的地方。


while ( nbr < 1 || nbr > 10 ) // 就是这里,范围1-10.如果改成 while ( nbr > 1 && nbr < 10 )
或者while (!( nbr < 1 && nbr > 10 ) ) 的输出结果是

alue 1 is 0
alue 2 is 0
alue 3 is 0
alue 4 is 0
alue 5 is 0

根本不需要等待你输入结果直接就给结果来了。 请大家试试(由于我不会插图所以没办法把截图给大家看看)
Trust_haitao365 2009-01-17
  • 打赏
  • 举报
回复
while(select < 1 || select > 4 )是当select小于1 或大于4时执行啊,其实根据逻辑规律,要变为1到4之间执行的话,只需加上!号即可,也就是, while(!(select < 1 || select > 4 )),就把范围控制在1-4间了
这样 while( select >1 && select <4 ) 也可以,不过跟上面的相比,少了端点值1和4.
wyswyg63 2009-01-17
  • 打赏
  • 举报
回复
同意ls, 要联系上下文才行

while ( nbr < 1 || nbr > 10 ) // 就是这里,范围1-10.如果改成 while ( nbr > 1 && nbr < 10 ) 就会出现错误,不信调试看看就知道
{
printf("Enter number %d of 5:", ctr + 1 );
scanf("%d", &nbr );
}
array[ctr] = nbr; //你的赋值语句是在while循环外面而不是里面 。所以当nbr在【1-10】之间时,前面while循环结束,进入这里赋值。然后你外层还有一个while,所以这个while的作用就是排除你输入< 1 和> 10的数,当然你最后获得的值就在1-10之间了。
ctr++;
sanguomi 2009-01-17
  • 打赏
  • 举报
回复
while( select < 1 || select > 4 ) 是条件不在[4,10]内之间的
while( select < 1 && select > 4 ) 是在条件在[4, 10]
叶落寒山 2009-01-17
  • 打赏
  • 举报
回复
这个循环的范围就是 <1 或 >10 的时候为真,为真时就在里面循环。
叶落寒山 2009-01-17
  • 打赏
  • 举报
回复
这个循环的范围就是 <1 或 >10 的时候为真,为真时就在里面循环。
叶落寒山 2009-01-17
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 puhjack 的回复:]
这个虽然不是我提问的那个,但是意思都一样。看看我注明的地方,它的范围是在1-10


#include <stdio.h>
#include <iostream>

int array[5];

int main(void)
{
int ctr = 0,
nbr = 0;
printf("This program prompts you to enter 5 numbers\n");
printf("Each number should be from 1 to 10\n");

while ( ctr < 5 )
{
nbr = 0;
while (…
[/Quote]

是楼主理解错了。
这段程序的意思是说:让你输入5个数。这5个数的取值范围要在1到10之间。
如果不是1到10的数呢,就让你不停的输入。

while ( nbr < 1 || nbr > 10 ) // 就是这里,范围1-10.如果改成 while ( nbr > 1 && nbr < 10 ) 就会出现错误,不信调试看看就知道
{
printf("Enter number %d of 5:", ctr + 1 );
scanf("%d", &nbr );
}

你说你的while循环要设计成什么样?
肯定是 不满足 1到10之间的时候,一直在里面循环喽。
知道有满足条件的情况,就退出循环。
所以逻辑没错,程序也没错。
楼主再好好想想。


puhjack 2009-01-17
  • 打赏
  • 举报
回复
谢谢大家,我结合你们所说已经明白了。
wjdlt_1997 2009-01-16
  • 打赏
  • 举报
回复
写个把小程序验证,别老研究语法。
「已注销」 2009-01-16
  • 打赏
  • 举报
回复
逻辑有点小问题,再仔细想想
fanfanyan 2009-01-16
  • 打赏
  • 举报
回复
楼主要的是不在1-4之间的,这样写也没问题:
while(!( select >= 1 && select <= 4))
ForestDB 2009-01-16
  • 打赏
  • 举报
回复
逻辑有点小问题啊。
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
while( select < 1 || select > 4 )
楼主搞错了吧,这个判断满足的是select不在[1,4]的范围

你要控制select在[1,4]内,应该是:

while(select >= 1&&select <= 4)
叶落寒山 2009-01-16
  • 打赏
  • 举报
回复
楼主一定是哪里漏看了。while( select < 1 || select > 4 ) 的范围控制不会是 1-4间。而是 <1 或 >4 的范围控制。

是不是漏看了 ! (非)

while(!( select < 1 || select > 4)) 的范围控制是 1-4间。
yellowhwb 2009-01-16
  • 打赏
  • 举报
回复
没有上下文,只要符合语法的,都是对的!
语义要联系上下文来看的!
LiuYi_7 2009-01-16
  • 打赏
  • 举报
回复
那你看下面具体的语句
shaoze5 2009-01-16
  • 打赏
  • 举报
回复
你看错了吧。好好看看是怎么写的啊?
lbh2001 2009-01-16
  • 打赏
  • 举报
回复
while( select < 1 || select > 4 ) 却把范围控制在1-4间 ----> while(!( select < 1 || select > 4))
puhjack 2009-01-16
  • 打赏
  • 举报
回复
程序在语法上没有错误,但是输入数字就发现问题了。我用的是devcpp也可以跑,但是输入数字后就有问题了。
puhjack 2009-01-16
  • 打赏
  • 举报
回复
你输入数字试试啊。
加载更多回复(15)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧