标题:[求助]上帝啊,我觉的没错啊
只看楼主
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
 问题点数:0 回复次数:4 
[求助]上帝啊,我觉的没错啊

我的目的是得到一个每位上的数都不同的四位数
程序如下


#include<iostream.h>
#include<stdlib.h>
void main()
{
int temp=4;
int shu[5]={11,12,13,14,15};
do
{
for(int i=0;i<temp;i++)
{
shu[i]=rand()%10;//得到一个小于10的随机数
cout<<shu[i];
}cout<<endl;
}while(shu[0]!=shu[1]&&shu[0]!=shu[2]&&shu[0]!=shu[3]&&shu[0]!=shu[4]&&shu[1]!=shu[2]&&shu[1]!=shu[3]&&shu[1]!=shu[4]&&shu[2]!=shu[3]&&shu[2]!=shu[4]&&shu[3]!=shu[4]);
}

运行结果:1740//这个数已经符合要求了,可为什么还要循环得到下一组数呢?
9488//而且这组数明显不符合要求,为何又停止循环了呢?

这个问题我想了好几天了,据我分析应该是这个while用错了,可是do,while这是标准的循环语句啊,怎么就错了呢???这就是搞不懂的地方!!!
希望大家帮帮忙,谢谢了!!!

搜索更多相关主题的帖子: 上帝 
2006-08-14 12:14
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
你想一下:
        for(int i=0;i&lt;temp;i++)
        {
            shu[i]=rand()%10;//得到一个小于10的随机数
            cout&lt;&lt;shu[i];
        }cout&lt;&lt;endl;
这是帮你输出的2次

在你输出你想要的以后,他并不会结束。只到输出一个你不想要的才会结束。所以在那个while(...)里面的东西,你只需要把他们都括起来,前面加个“!”就可以了

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-14 14:50
lovl
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-8-10
得分:0 
这里主要体现了while与do while的用法上差别问题.
while()是当符合里面的东西时才执行..这个易懂
而do while不同的是先执行再判断...而题中是先输出1740之后才判断..这个数符合()里面的东西.之后再循环一次,但输出9488后不符合()里面的东西了,,,此时循环stop
2006-08-14 17:28
无限忧伤
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-4-5
得分:0 
最好设定一个时钟,要不生成的都是伪随机数,每次结果都一样呢!   

2006-08-15 23:27
虫虫飞ya飞
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2005-11-28
得分:0 

第一个数是1740那么这个数符合while里面的要求都不相等所以再循环一次,第二次是1988很明显有相等数字不符合while循环所以就跳出循环结束了.我觉的不是你程序错误看你的叙述好象是你对do..while循环没理解

[此贴子已经被作者于2006-8-17 9:31:42编辑过]


2006-08-17 09:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-83852-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.225703 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved