作者eric8347 (杀人电风扇)
看板Programming
标题Re: [问题] 老梗的猜数字 (C++)
时间Sun Apr 20 22:46:40 2008
※ 引述《revivalworld (指考加油Q_Q)》之铭言:
: ※ 引述《eric8347 (杀人电风扇)》之铭言:
: : 虽然这是一个快被讨论到烂掉的题目
: : 不过我还是要来问一下XD
: : 主程式部分都已经OK
: : 但是老师和我说要是输入英文的话
: : 程式就会错误
: : 要我回去修改
: : 在参考了里面的猜数字&cin的特殊用法
: : 修改程式码後
: : 变成现在可以正确判定是不是正确输入数字
: : 或者输入的是英文or英文混杂数字
: : 但是问题来了
: : 确定是数字後
: : 有些数字会无法继续进行下面的程式码
: : 让我非常苦恼
: : 附上cpp档
: : http://eric8347.googlepages.com/guess.cpp
: : 请求各位大大了...
: if( !cin.good() ) {
: // 清除 cin 的所有 flag, 设立 good bit
: // 记得这个动作要先做,不然只要 cin 处在错误状态,任何操作都是无效的
: cin.clear();
: // 吃掉 input buffer 里面的所有字元
: cin.ignore( numeric_limits<streamsize>::max(), '\n' );
: }
先说声 谢谢
感激愿意替我看程式码的大大
我刚刚又重新看了一下原本的程式码
发现原本的问题应该是
确定是数字後(或者判断输入中有出现英文的话)
再输入一组数字
就可以判定
ex:
1234
1234 ==>1A 1B
or
12a4
1234 ==>1A 1B
这样子
还有阿
我发现程式一执行如果就输入英文
他就会出错
但要是先输入数字
就没问题...
天阿到底是怎麽一回事阿...
我把部分的程式码贴上来好了
其中while(cin >> strtmp)这一段
因为是参考的
看不太懂
我在想会不会是这一段里面有出错
cout << "请输入 4 位数字(0123~9876):"<<endl;
cin >> ans;
while(cin >> strtmp)
{
check = true;
for(int c=0;c < strtmp.size();c++)
{
if(!isdigit(strtmp[c]))
{
check = false;
break;
}
}
if(check)
{
istringstream istr(strtmp);
istr >> ans;
break;
}
else
cout << "你输入的不是数字喔!" <<endl;
}
if (ans<0123 || ans>9876)
cout << "不合理的范围。"<<endl;
else
break;
}
问题真的很多
非常不好意思
请见谅...
--
http://eric8347.blogspot.com
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.115.22.7
1F:推 revivalworld:不太懂你的第二个问题(原文里的) 60.244.216.2 04/20 23:09
2F:→ revivalworld:原文第一个问题我已经告诉你解法了 60.244.216.2 04/20 23:09
3F:→ eric8347:如果第一次输入正确数字 没反应 接下来 58.115.22.7 04/20 23:33
4F:推 garbager:cin >> ans; 那行是多余的 59.112.179.16 04/20 23:34
5F:→ eric8347:第二次输入正确的数字就可以正确执行 58.115.22.7 04/20 23:33
6F:→ eric8347:天阿 原来是那行忘记去掉...太感谢了!! 58.115.22.7 04/20 23:35
7F:→ eric8347:再一次感谢愿意帮我解决问题的各位大大! 58.115.22.7 04/20 23:36