关于有效性检验的问题

yunmenggyy 2013-01-02 08:10:32
大家看看这段代码
for(i=0;i<ND-1;i++)
{
for(j=i+1;j<ND;j++)
{
Here:cout<<"请输入"<<letter[i]<<"到"<<letter[j]<<"的距离(不能到达则用-1表示):"<<endl;;
cin>>distance[i][j];
if(distance[i][j]>=-1&&distance[i][j]!=0)
distance[j][i]=distance[i][j];
else
{
cout<<"Input error!";
getchar();
goto Here;
}

}
}
我现在要求输入的只能是大于等于-1的数字,当输入其他的字符时出错,我的判断方法如上,但是总有错,总觉得是缓冲区什么之类的,该怎么弄?????????
...全文
349 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 1 楼 gumh 的回复:
for(i=0;i<ND-1;i++) { for(j=i+1;j<ND;j++) { Here:cout<<"请输入"<<letter[i]<<"到"<<letter[j]<<"的距离(不能到达则用-1表示):"<<endl;; cin>>distance[i][j]; if(distance[i][j] < -1 || distance[i][……
还有,大神,您没看懂我的意思,我的else是针对非数值数据的
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 1 楼 gumh 的回复:
for(i=0;i<ND-1;i++) { for(j=i+1;j<ND;j++) { Here:cout<<"请输入"<<letter[i]<<"到"<<letter[j]<<"的距离(不能到达则用-1表示):"<<endl;; cin>>distance[i][j]; if(distance[i][j] < -1 || distance[i][……
额,大神,您是什么意思呢?
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 4 楼 sha_jinhao 的回复:
楼上对的 对非数值再加个if
不对呀,大神,我加了也出错,会不会是其他的原因??
prajna 2013-01-03
  • 打赏
  • 举报
回复
引用
我的else是针对非数值数据的
將distance[i][j]初始化為<-1的數,比如-2; 下面的應該就可以 for(i=0;i<ND-1;i++) { for(j=i+1;j<ND;j++) { Here:cout<<"请输入"<<letter[i]<<"到"<<letter[j]<<"的距离(不能到达则用-1表示):"<<endl;; cin>>distance[i][j]; if(distance[i][j] < -1 || distance[i][j] == 0) { cout<<"Input error!"; getchar(); goto Here; } } }
jimette 2013-01-03
  • 打赏
  • 举报
回复
楼上对的 对非数值再加个if
疯狂的红豆 2013-01-03
  • 打赏
  • 举报
回复
引用 17 楼 yunmenggyy 的回复:
引用 16 楼 ZLhy_ 的回复:引用 14 楼 yunmenggyy 的回复:引用 13 楼 ZLhy_ 的回复:引用 11 楼 yunmenggyy 的回复:引用 10 楼 ZLhy_ 的回复:如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi();
百度贴来的:
C语言库函数名: atoi
功 能: 把字符串转换成整型……

哎,你的分都拿了只能给你服务到底了,我写了一个实现类似功能的你试试

bool GetLegalInt(int &rival)
{
bool flag = true;
char ch;
char chs[10];
int num = 0;
for(; ;)
{
cin>>ch;
if(ch == '!') //在这里做了一个结束输入结束标志,为了实现你的目的确实有些麻烦了
break;
if('0' <= ch && ch <= '9') //合法的数值型字符才进入数组chs
{
chs[num++] = ch;
}
else //否则直接返回false
{
rival = -1;
return false;
}
}
//程序能执行到这一步说明已经chs中都是数值型字符了
chs[num] = '\0'; //最后要加一个这玩意
rival = atoi(chs);
return flag;
}


主函数中的调用:
int i;
if(GetLegalInt(i) == true)
{
cout<<"哈哈i = "<<i<<endl;
}
我试了 可以运行的:
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 16 楼 ZLhy_ 的回复:
引用 14 楼 yunmenggyy 的回复:引用 13 楼 ZLhy_ 的回复:引用 11 楼 yunmenggyy 的回复:引用 10 楼 ZLhy_ 的回复:如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi(); 百度贴来的: C语言库函数名: atoi 功 能: 把字符串转换成整型数。 名字来源:array to ……
我刚刚把代码改了一下,发现依然实现不了,最后还是不可避免的出现刚刚的问题
疯狂的红豆 2013-01-03
  • 打赏
  • 举报
回复
引用 14 楼 yunmenggyy 的回复:
引用 13 楼 ZLhy_ 的回复:引用 11 楼 yunmenggyy 的回复:引用 10 楼 ZLhy_ 的回复:如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi(); 百度贴来的: C语言库函数名: atoi 功 能: 把字符串转换成整型数。 名字来源:array to integer 的缩写。 原型: int a……
呃 我也是
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 12 楼 JingTianWen 的回复:
cin.clear();//清除错误状态 cin.sync();//清除缓冲区
还真没看见这个好东西,呵呵
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 13 楼 ZLhy_ 的回复:
引用 11 楼 yunmenggyy 的回复:引用 10 楼 ZLhy_ 的回复:如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi(); 百度贴来的: C语言库函数名: atoi 功 能: 把字符串转换成整型数。 名字来源:array to integer 的缩写。 原型: int atoi(const char *np……
呵呵呵,好的,我大二,你呢?
疯狂的红豆 2013-01-03
  • 打赏
  • 举报
回复
引用 11 楼 yunmenggyy 的回复:
引用 10 楼 ZLhy_ 的回复:如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi(); 百度贴来的: C语言库函数名: atoi 功 能: 把字符串转换成整型数。 名字来源:array to integer 的缩写。 原型: int atoi(const char *nptr); 使用方法: #include……
自从有用CSDN就很少用QQ了,有问题就发帖或是在给我留言好了,除了上课,我白天几乎都是在线状态的,我会很热心的。还有我很弱,离牛人远着呢
竞天问 2013-01-03
  • 打赏
  • 举报
回复
cin.clear();//清除错误状态 cin.sync();//清除缓冲区
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 10 楼 ZLhy_ 的回复:
如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi(); 百度贴来的: C语言库函数名: atoi 功 能: 把字符串转换成整型数。 名字来源:array to integer 的缩写。 原型: int atoi(const char *nptr); 使用方法: #include <stdlib.h> #incl……
这个函数确实方便,呵呵,非常感谢,对了大神,能够加你QQ吗,我的是793185214,以后方便向您请教!!!
疯狂的红豆 2013-01-03
  • 打赏
  • 举报
回复
如果你的char chs[10];中存储的都是正确的数字字符的话,那可以调用库函数atoi(); 百度贴来的:   C语言库函数名: atoi   功 能: 把字符串转换成整型数。   名字来源:array to integer 的缩写。   原型: int atoi(const char *nptr); 使用方法:  #include <stdlib.h>   #include <stdio.h>   int main()   {   char a[] = "-100" ;   char b[] = "123" ;   int c ;   c = atoi( a ) + atoi( b ) ;   printf("c = %d\n", c) ;   return 0;   }   执行结果:   c = 23
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 8 楼 ZLhy_ 的回复:
引用 7 楼 yunmenggyy 的回复:引用 6 楼 ZLhy_ 的回复:可能是你输入其他字符的时候也会进入到if条件里面吧,因为输入的字符被一个整型变量接受的话会转换成其ASCII的,而ASCII都是正的。你可以单独做一个函数来检测键盘上的输入,并控制职能从0~9这十个数字键上输入,否则不通过。至于具体实现,我也没做过大致思路 bool GetValue(int ……
哦,有道理,不过还有一点,就是如果我在此再做一个判断函数的话,那么假设我输入的是正确数字的话,岂不是还要将字符转换成数字?
疯狂的红豆 2013-01-03
  • 打赏
  • 举报
回复
引用 7 楼 yunmenggyy 的回复:
引用 6 楼 ZLhy_ 的回复:可能是你输入其他字符的时候也会进入到if条件里面吧,因为输入的字符被一个整型变量接受的话会转换成其ASCII的,而ASCII都是正的。你可以单独做一个函数来检测键盘上的输入,并控制职能从0~9这十个数字键上输入,否则不通过。至于具体实现,我也没做过大致思路 bool GetValue(int &amp;val) { char……
不管你输入什么,接受设备获取的都是字符,只不过是根据你的接受空间类型不同可能是int float等而把这些输入转换成了相应的变量了。
yunmenggyy 2013-01-03
  • 打赏
  • 举报
回复
引用 6 楼 ZLhy_ 的回复:
可能是你输入其他字符的时候也会进入到if条件里面吧,因为输入的字符被一个整型变量接受的话会转换成其ASCII的,而ASCII都是正的。你可以单独做一个函数来检测键盘上的输入,并控制职能从0~9这十个数字键上输入,否则不通过。至于具体实现,我也没做过大致思路 bool GetValue(int &val) { char chs[10]; int num = ……
嗯,我也想过这个问题,可是我就是不明白为什么会这样?我的缓冲区为么没清干净
疯狂的红豆 2013-01-03
  • 打赏
  • 举报
回复
可能是你输入其他字符的时候也会进入到if条件里面吧,因为输入的字符被一个整型变量接受的话会转换成其ASCII的,而ASCII都是正的。你可以单独做一个函数来检测键盘上的输入,并控制职能从0~9这十个数字键上输入,否则不通过。至于具体实现,我也没做过大致思路 bool GetValue(int &val) { char chs[10]; int num = 0; char ch; for(; ;) { cim>>ch; if('0' <= ch && ch <= '9') {chs[num++] = ch; } else { //根据你的情况自己加 } } }
prajna 2013-01-02
  • 打赏
  • 举报
回复
for(i=0;i<ND-1;i++) { for(j=i+1;j<ND;j++) { Here:cout<<"请输入"<<letter[i]<<"到"<<letter[j]<<"的距离(不能到达则用-1表示):"<<endl;; cin>>distance[i][j]; if(distance[i][j] < -1 || distance[i][j] == 0) //distance[j][i]=distance[i][j]; // else { cout<<"Input error!"; getchar(); goto Here; } } }
现在论文抄袭、学术打假成为学术界、媒体关注的话题。有的学者心存侥幸,有的学者对学术严谨性未加重视等,以至于被相关人士揭发举报,最终身败名裂。而许多毕业生因为种种原因,并未对论文抄袭现象加以重视,最后不能顺利毕业,荒废了几年时间,得不偿失。现在提供论文检测的机构主要来源于三大中文期刊数据库,即中国知网论文检测系统,万方论文相似性检测系统,维普通达检测系统。 现在应用较多的是中国知网和万方的检测系统,但是两者都不是免费的,其中,中国知网的费用相对高,在淘宝上一篇硕士论文的检测费用达到两百元。介于此考虑,我在网上收集了一下,提供免费检测论文的几个网站。虽然与权威检测机构的检测结果不一定完全一致,但肯定对论文的修改是有一定帮助的。免费论文检测 1 PaperPass论文通行证网 www.paperpass.org/index.aspx?f=A4BBA37525E99A492050231C7323CF76 系统推出免费试用功能,通过您的手机号码即可申请。申请成功后,您将免费获得3000字的检测量(每个手机限申请一次)。 注:由于服务器服务能力有限,网站每天(从零点计算)提供1000个用户申请免费试用,申请完为止,请您在每天的较早些时候申请,敬请谅解。 PaperPass.Org网站诞生于2007年,是全球首个中文文献相似度比对系统,运营三年来,已经发展成为最权威、最可信赖的中文原创性检查和预防剽窃的在线网站。目前在用检测版本是汲取了大量的用户意见后开发的,更新了比对算法,比对的效率和准确率大大提高,另外还增加了上传文件、下载报告、引用率统计等实用功能。我们将继续贴近用户需求,升级比对算法,为用户提供更为专业的论文原创性检测服务。 2 维普通达检测系统 http://gocheck.cn/s/8059 第一次成功充值之后即赠送第一次充值额度10%的积分,截止到4月1日,先注册先得哦。 维普-通达论文引用检测系统(简称VTTMS)是由重庆维普资讯有限公司与通达恒远(北京)信息技术有限公司共同研制而成,该系统结合了维普资讯的数据资源优势与通达的数据挖掘技术并成功地应用在大规模文本比对领域上的创新产品。通过对文档关键语义片段的识别、检测,可检测出文档中存在的不当引用、过度以用,甚至是抄袭等现象,并计算出文档的引用率、复写率和自写率等重要指标,为各级论文评定、检测、发表机构提供论文评定和论文收录的检测依据。 该系统采用TONDA公司自主研发的核心算法技术,具有业内领先的检测速度。全文比对数据库由专业的期刊数据库、广泛的web互联网数据、TONDA共享数据库和用户自建库组成,保证了比对源的专业性和广泛性。VTTMS具备很高的实用性和易用性,自其成功研发以来,已经在全国范围内众多行业和部门得到了广泛使用,获得了高度的好评,取得了良好的口碑。 3 知识产权卫士-拷克网 http://www.copycheck.com.cn 拷克网成立于2009年,是专业的内容抄袭智能检测平台服务商,成立以来一直执行 “技术领先战略”,开创了具有国际领先水平的核心、高端、基础技术---互联网在线中文智能抄袭检测技术,作为一家拥有领先技术的服务商,我们致力于通过对技术的创新和应用,来满知识版权组织和个人的需要。 公司的技术核心是内容抄袭智能检测技术研究,以分词技术为基础,以结构智能方法论为指导,开发出文本语义结构化引擎、版式语义结构化引擎、行为语义分析引擎,由此构建了互联网内容抄袭智能检测服务平台。该服务平台主要提供:网站监控、数据萃取、信息标引、情报发现与分析、知识网络、行为语义分析等在线服务。 4 论文检测大师 http://www.check-paper.com/ 只支持 doc 类型文件上传!提交您的有效论文,请不要上传无用文档,每个IP仅有2次检测机会,您的检测结果将以word文档的方式发送到您的邮箱里。 5 中国搜文章照妖镜 http://www.zhongguosou.com/ 文章照妖镜不但可用来分析文章抄袭的程度,而且可用来检测自己的博客文章被别人复制、被别人疯狂传播的程度,帮你保护你博客的版权。 6 外文论文检测系统 www.turnitin.com 必杀招:智慧语料库技术+GradeMark™ +专利的 Peer Review ,在全世界90多个国家、超过7000所高等院校应用,每天检测10万篇论文。适用:英文论文抄袭检查 http://www.dustball.com/ 7 繁体论文检查网站: 网址:http://www.ppvs.org 网址:http://www.paper119.com/
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows Blue(Windows 8.1),同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.0版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件,增强版中还额外包含了c++ Redistributable Package,因此增强版适合无法自行解决c++相关问题的用户使用;在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。V3.0版本使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。此功能仅限于增强版。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了3项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7用户,可以直接运行本程序。 同时鉴于Windows 8(Windows Blue、Windows 8.1)系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows Blue、Windows 8.1)系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388所有的更新以及技术支持都可以到该博客上找到。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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