关于有效性检验的问题

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的数字,当输入其他的字符时出错,我的判断方法如上,但是总有错,总觉得是缓冲区什么之类的,该怎么弄?????????
...全文
363 19 打赏 收藏 转发到动态 举报
写回复
用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; } } }

65,209

社区成员

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

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