1.
- 题目:这个程序将向用户提出一个"y/N"问题,然后把用户输入的值赋值给answer变量。
- 要求:针对用户输入'y'或'y' 和'N'或'n'进行过滤
#include <iostream>
using namespace std;
int main(){
char answer;
cout<<"请问可以格式化您的硬盘吗?[Y/N]"<<"\n";
cin>>answer;
switch(answer) {
case 'Y':
case 'y':
cout<<"随便格式化硬盘不好哦~"<<"\n";
break;
case 'N':
case 'n':
cout<<"您的选择是明智的~"<<"\n";
break;
default:
cout<<"您的输入不符合要求:"<<"\n";
break;
}
return 0;
}
但是双击程序所在目录下的.exe文件,输入后发现了闪现
解决:
#include <iostream>
using namespace std;
int main(){
char answer;
cout<<"请问可以格式化您的硬盘吗?[Y/N]"<<"\n";
cin>>answer;
switch(answer) {
case 'Y':
case 'y':
cout<<"随便格式化硬盘不好哦~"<<"\n";
break;
case 'N':
case 'n':
cout<<"您的选择是明智的~"<<"\n";
break;
default:
cout<<"您的输入不符合要求:"<<"\n";
break;
}
//解决程序目录运行.exe文件的闪现问题
cin.ignore(100,'\n');//忽略最多100个字符,直到遇到换行符结束
cout<<"输入任何字符结束程序"<<"\n";
cin.get();
return 0;
}
2.
- 题目:编写一个"温度单位转换程序",提示用户以【xx.xC】或【xx.xF】的格式输入。
- 要求:如果用户输入的是34.2C程序将自动转换为90.32F并输出!
#include <iostream>
using namespace std;
int main(){
//华氏温度==摄氏温度*9.0/5.0+32
const unsigned short ADD_SUBTRACT=32;
const double RATIO=9.0/5.0;
double tempIn,tempOut;
char typeIn,typeOut;
cout<<"请输入一个温度,以xx.XC或xx.xF这样的格式:";
cin>>tempIn>>typeIn;
cin.ignore(100,'\n');//避免回车的影响
cout<<"\n";
switch(typeIn){
case 'C':
case 'c':
tempOut=tempIn*RATIO+ADD_SUBTRACT;
typeOut='F';
typeIn='C';
break;
case 'F':
case 'f':
tempOut=(tempIn-ADD_SUBTRACT)/RATIO;
typeOut='C';
typeIn='F';
break;
deafult:
typeOut='E';
break;
}
if(typeOut!='E'){
cout<<tempIn<<typeIn<<"="<<tempOut<<typeOut<<"\n\n";
}
else{
cout<<"输入错误!"<<"\n\n";
}
cout<<"请输入任何字符结束程序!"<<"\n\n"; //上面已经消除了回车的影响
cin.get();
return 0;
}
3. 对数据进行合法性检查
非法输入会让程序变得毫无用处,甚至导致整个系统崩溃。
对输入数据进行合法性检查的具体做法取决于具体的变量类型和它们的取值范围。
比较常见的检查项目包括:
- 检查某个数值是不是一个正数(例如商品的价格、老妈的年龄、老婆的体重)”;
- 检查某个数值是不是落在给定的范围(例如女朋友的年龄不能小于0或者大于120吧?);
- 检查某个字符是不是一个特定的值(例如前边的y或者N);
前面两个demo就使用了switch()来判断用户是否输入了程序预期的值
但是还有一些潜伏的问题我们没有发掘出来。例如cin调用失败(无法把一个值赋值给一个变量)时,程序仍会像cin调用成功一样继续自欺欺人。举例...
事实上没有这么大的温度!还应该继续对其进行检查。
解决这些问题的办法之一就是对cin 调用的结果不要做任何假设。
cin 对象有几个专门用来报告其工作情况的成员函数,它们将返回一个真/假值来表明cin的状态。
- eof():如果到达文件(或输入)末尾,返回true;
- fail():如果cin 无法工作,返回true;
- bad():如果cin因为比较严重的原因(例如内存不足)而无法工作,返回true;
- good():如果以上情况都没发生,返回true。
未完待续。。。