谁能帮我解决这个C++的问题啊???

//Example:josephus#include<iostream>usingnamespacestd;intmain(){intm;cout<<"请输入小男孩的个数... //Example:josephus
#include<iostream>
using namespace std;
int main()
{
int m;
cout<<"请输入小男孩的个数:"<<endl;
cin>>m;
int *boy=new int[m];
while(m<=0)
{
cout<<"很抱歉,您输入的数字中有负数或零,请重新输入"<<endl;
cin>>m;
}
if(boy==0)
{
cout<<"很抱歉,我们给您分配内存时出现错误,请重试!!!"<<endl;
return -1;
}
int Total =m;
//const int Total =7;
int ChooseNum;
//int boy[Total];
int i,j;
for(i=0;i<Total;i++)
boy[i]=i+1;
cout<<"请输入一个您要删除的小男孩数字:"<<endl;
cin>>ChooseNum;
while(ChooseNum<=0)
{
cout<<"您输入的数字中有负数或零,请重新输入"<<endl;
cin>>ChooseNum;
}

cout<<"未删除小男孩前,小男孩的数字编号有:"<<endl;
for (i=0;i<Total;i++)
cout<<boy[i]<<"\t";
cout<<endl;
int k=1;
int n=-1;
while(true)
{
for(j=0;j<ChooseNum;)
{
n=(n+1)%Total;
if(boy[n]!=0) j++;
}
if(k==Total) break;
boy[n]=0;
cout<<"第 "<<k<<" 次删除小男孩,剩下的小男孩是:"<<endl;
for(i=0;i<Total;i++)
if(boy[i]!=0) cout<<boy[i]<<"\t";
cout<<endl;
k++;
}
cout<<"数字 "<<boy[n]<<" 的小男孩是赢家。"<<endl;
return 0;
}
我的程序是没有问题的,但是我现在的程序只能使我的程序在输入是非负数和零输出错误信息,并不能在输入其它除数字以外的字符有错误的提示信息,原因是我不知道有什么函数或是其它的方法能够解决它,高手救命啊?
展开
 我来答
百度网友cb8d0e198
2011-04-11 · TA获得超过1198个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:778万
展开全部
#include<iostream>
using namespace std;
int main()
{
int m;
cout<<"请输入小男孩的个数:"<<endl;
char input[20];
cin>>input;
bool m_bInt=true;
while(true)//思路:先用字符串来接收输入信息,谈升然后判断每个字符是不是在0-9之间,若不是,便提示用户重新输入
{
for (int i=0;input[i];i++)
{
if (!(input[i]>='0'&&input[i]<='9'))
{
m_bInt=false;
break;
}
}
if (m_bInt==true)
{
break;
}
m_bInt=true;
cout<<"很抱歉,您的输入有误,请重新输入"<<endl;
cin>>input;
}
m=atoi(input);//将字符串转换成整数
int *boy=new int[m];
if(boy==0)
{
cout<<"很抱歉,我们给您分配内存时出现错误,请重试!!!"<<endl;
return -1;
}
int Total =m;
//const int Total =7;
int ChooseNum;
//int boy[Total];
int i,j;
for(i=0;i<Total;i++)
boy[i]=i+1;
cout<<"请输入一个您要删除的小男孩数字:"<<endl;
cin>>ChooseNum;
while(ChooseNum<=0)
{
cout<<"您输入的数字中有负数或零,请重新输入"<<endl;
cin>>ChooseNum;
}

cout<<尘纳"未删除小男孩前,小男孩的数字编号有:"<<endl;
for (i=0;i<Total;i++)
cout<<boy[i]<<派侍没"\t";
cout<<endl;
int k=1;
int n=-1;
while(true)
{
for(j=0;j<ChooseNum;)
{
n=(n+1)%Total;
if(boy[n]!=0) j++;
}
if(k==Total) break;
boy[n]=0;
cout<<"第 "<<k<<" 次删除小男孩,剩下的小男孩是:"<<endl;
for(i=0;i<Total;i++)
if(boy[i]!=0) cout<<boy[i]<<"\t";
cout<<endl;
k++;
}
cout<<"数字 "<<boy[n]<<" 的小男孩是赢家。"<<endl;
return 0;
}
更多追问追答
追问
可是我定义的小孩个数是动态的?
追答
m=atoi(input);//将字符串转换成整数
int *boy=new int[m];
这边不就是动态分配的?自己看清楚啊~~还有什么不明白的,继续追问~
既然用了动态分配的,在程序的最后,记得用delete去释放内存,否则会造成内存泄露~~
威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
戈壁与清潭
2011-04-11 · TA获得超过735个赞
知道小有建树答主
回答量:571
采纳率:57%
帮助的人:122万
展开全部
使用循环语态信句对整个输入流进行检查并转化成数字
int i,m=0;
char c;
while(m<昌闭乎=0)
{
while((c=getchar())!='n')
{
if(c>='0'&&c<='9')
m=m*10+c-'0';
else { n=0; break;}
}
if(n>0) break;
cout<<"耐悉很抱歉,您输入有误,请重新输入"<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
owensss
2011-04-11 · 超过28用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:0
展开全部
if ( !(cin >> ChooseNum) )
{
cout <凳渗< "枣山脊not an integer!" <唯春< endl;
}
追问
可是当我输入小数时就有问题了,小男孩的个数应该没有小数的吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小七说LoRa
2011-04-11 · TA获得超过461个赞
知道小有建树答主
回答量:433
采纳率:0%
帮助的人:232万
展开全部
或者你可以嫌蔽这么写
cout<<"请正改输入小男孩的个举者判数:"<<endl;
cin>>m;
if(m>=1)
{
你的操作
}
else
{
您的输入有误
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-11
展开全部
好像还没有哪个函数可以实现;键盘上每一个按键都对应相应的键值厅尘毕扮芹,只允许对应于数字的键值,其他的键值就提示错误;结合着硬件驱动编程,需要对计算兄世机很了解。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式