首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这里出错,真的太神奇了,哪位高手知道原因吗。

2012-02-11 
这里出错,真的太神奇了,谁知道原因吗。。#include stdafx.h#include iostreamusing namespace std#defi

这里出错,真的太神奇了,谁知道原因吗。。
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX_SIZE 99

struct role
{
char name[MAX_SIZE];
int life;
int level;
};

bool isNumber(char str[],int x)//判断是否是数字的方法
{
int i = 0;
int flog = 0;
for(i=0;i<strlen(str);i++)
{
if(isdigit(str[i])){}
else if(str[i] == '.')
{
flog++;
printf("第一个小数点的位置%d已经被记下!\n",i);
if(flog>1)
{
printf("都已经有一个小数点了!还有一个?出错!请重新输入一个正确的数字!\n");
return false;
}
}
else
{
printf("请重新输入一个正确的数字!\n");
return false;
}
}
return true;
}

void createRole(role *pwRole,int x)//创建角色的方法
{
char *str = new char[MAX_SIZE];
bool bl = true;
for(int i = 0; i < x;i ++)
{
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的姓名:"<<endl;
cin>>pwRole[i].name;

cout<<"请输入第";
cout<<(i+1);
cout<<"个人的生命:"<<endl;
cin>>str;
while(true == bl)
{
if(isNumber(str,strlen(str)))
{
int y = atoi(str);
pwRole[i].life = y;
bl = false;
}
else
{
cin>>str;
}
}bl = true;
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的等级:"<<endl;
cin>>str;
while(true == bl)
{
if(isNumber(str,strlen(str)))
{
int z = atoi(str);
pwRole[i].level = z;
bl = false;
}
else
{
cin>>str;
}
}

}
for(int i = 0; i < x;i ++)
{
cout<<pwRole[i].name<<endl;
cout<<pwRole[i].life<<endl;
cout<<pwRole[i].level<<endl;
}
delete str;
cout<<"**********************"<<endl;
};

int _tmain(int argc, _TCHAR* argv[])
{
char *str = new char[MAX_SIZE];
bool bl = true;
cout<<"请输入要创建多少个角色:"<<endl;
cin>>str;
while(true == bl)
{
if(isNumber(str,strlen(str)))
{
int x = atoi(str);
role *pwRole = new role[x];
createRole(pwRole,x);
bl = false;
}
else
{
cin>>str;
}
}
  delete str;
return 0;
}

红色的代码是输入生命值的,在创建了2个或两个以上的角色之后,会出现错误,但是第一个角色的生命值是正确的,而且在他下面的输入等级的代码却多少个角色都是正确输出的。。很神奇的。。有谁知道原因吗。。或者是我太菜了看不出来。。

[解决办法]
bool bl = true;
for(int i = 0; i < x;i ++)
{
..

for(int i = 0; i < x;i ++)
{
bool bl = true;
把这句放到循环里面吧,否则,执行一次循环之后bl 的值就是false了,下面的就不会执行了
while(true == bl)
{
if(isNumber(str,strlen(str)))
{
int y = atoi(str);
pwRole[i].life = y;
bl = false;
}
else
{
cin>>str;
}
}
[解决办法]
for(i=0;i<strlen(str);i++)// 在循环中这么写课不是好习惯,strlen(str)是非常耗时的操作,你不应该每次都去计算
[解决办法]
void createRole(role *pwRole,int x)//创建角色的方法
{
char *str = new char[MAX_SIZE];
bool bl = true;

这里的这个bool bl = true;放在你要输入的 
while(true == bl)
{
if(isNumber(str,strlen(str)))
{ 这个while的前面
你输入等级后 bl为false 也就是从第2次开始都没能输入。


或者在你输入完等级后吧 bl有赋值为 TRUE 就可以了。

热点排行