编译怪谈

nyunknown 2002-04-25 07:15:40
代码如下:
#include<iostream.h>
#include<stdlib.h>
#include<time.h>

void main()
{
srand(time(0));
int counter=0;
int magic,guess;
magic=1+rand()%1000;
cout<<"I have a number between 1 and 1000.\n"
<<"Can you guess my number?\n"
<<"Please type your first guess."<<endl;
cin>>guess;
counter++;
while(guess!=magic)
{
if(guess>=magic)
cout<<"Too high,try again.\n";
if(guess<=magic)
cout<<"Too low,try again.\n";
cin>>guess;
counter++;
}
if(counter==10)
cout<<"Ahah! You know the secret.\n";
if(counter>10)
cout<<"You should be able to do better.\n";
if(counter<10)
cout<<"Either you know the secret or you got lucky!"
<<endl;
for(;;);
}
最后一个for循环是用来延时的,可以去掉,
但如果不去掉,编译后执行时,当应该要显示语句Ahah! You know the secret和You should be able to do better.时,它就不会显示出来。这是怎么回事?

另一个问题的代码:
#include<iostream.h>
#include<stdlib.h>
#include<time.h>

int produce_rand_number(void)
{
return 1+rand()%10;
}

void main()
{
int result;
srand(time(0));
for(;;)
{
int number1=produce_rand_number();
int number2=produce_rand_number();

cout<<"how much is "<<number1<<" "
<<"times "<<number2<<"?---(0 to end)"<<endl;
cin>>result;

if(result==0)exit(0);

while(result!=number1*number2)
{
cout<<"No,please try again.\n";
cin>>result;//为什么我输入0点几,如:0.1程序就会进入无限循环

}
cout<<"Very good!"<<endl;
}
}

最后一个BC问题:
用VC在DOS下编程,往往执行后就会立即退出,怎样才能使之延时退出

...全文
54 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanxiongwei 2002-04-27
  • 打赏
  • 举报
回复
同意nyunknown(unknown)
blue_flash 2002-04-27
  • 打赏
  • 举报
回复
输入0.1会运行到这个函数
int istream::getint(char * buffer) // returns length
{
int base, i;
int c;
int fDigit = 0;
int bindex = 1;

if (x_flags & ios::dec)
base = 10;
else if (x_flags & ios::hex)
base = 16;
else if (x_flags & ios::oct)
base = 8;
else
base = 0;

if (ipfx(0))
{
c=bp->sgetc();
for (i = 0; i<MAXLONGSIZ-1; buffer[i] = (char)c,c=bp->snextc(),i++)
{
if (c==EOF)
{
state |= ios::eofbit;
break;
}
if (!i)
{
if ((c=='-') || (c=='+'))
{
bindex++;
continue;
}
}
if ((i==bindex) && (buffer[i-1]=='0'))
{
if (((c=='x') || (c=='X')) && ((base==0) || (base==16)))
{
base = 16; // simplifies matters
fDigit = 0;
continue;
}
else if (base==0)
{
base = 8;
}
}


// now simply look for a digit and set fDigit if found else break

if (base==16)
{
if (!isxdigit(c))
break;
}
else if ((!isdigit(c)) || ((base==8) && (c>'7')))
break;

fDigit++;
}
if (!fDigit)
{
state |= ios::failbit; // <= 运行到这里时,因为不是数字,会设置错误状态,下次在获取输入时因为存在错误状态,直接跳过了,因此,再次接收输入时,必须清除掉错误状态。
while (i--)
{
if(bp->sputbackc(buffer[i])==EOF)
{
state |= ios::badbit;
break;
}
else
state &= ~(ios::eofbit);
}
i=0;
}
// buffer contains a valid number or '\0'
buffer[i] = '\0';
isfx();
}
if (i==MAXLONGSIZ)
{
state |= ios::failbit;
}
return base;
}
nyunknown 2002-04-27
  • 打赏
  • 举报
回复
没人知道吗???
blue_flash 2002-04-26
  • 打赏
  • 举报
回复
问题1 没有结束输出,应改为:
if(counter==10)
cout<<"Ahah! You know the secret.\n";
if(counter>10)
cout<<"You should be able to do better.\n";
if(counter<10)
cout<<"Either you know the secret or you got lucky!\n"

cout<<endl;

问题2
result 声明为int 所以输入小数,自动取整,(不是四舍五入)
输入0.XXX时 result = 0;

问题3
getchar()

blue_flash 2002-04-26
  • 打赏
  • 举报
回复
问题1 没有结束输出,应改为:
if(counter==10)
cout<<"Ahah! You know the secret.\n";
if(counter>10)
cout<<"You should be able to do better.\n";
if(counter<10)
cout<<"Either you know the secret or you got lucky!"
<<endl;

nyunknown 2002-04-26
  • 打赏
  • 举报
回复
问题1:语句cout<<"Either you know the secret or you got lucky!"
<<endl;
和语句cout<<"Either you know the secret or you got lucky!";
cout<<endl;有什么不同?
问题2:result即使为0也不应该进入无限循环啊



16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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