C++输出输入小结

题目:

这个程序将向用户提出一个“Y/N”问题,然后把用户输入的值赋值给answer变量。

要求:

针对用户输入‘Y’或‘y’和‘N’或‘n’进行过滤;

发掘程序可能存在的任何问题,想想为什么?

 #include <iostream>

 int main()
{
char answer; std::cout << "¿ÉÒÔ¸ñʽ»¯ÄúµÄÓ²ÅÌÂð?[Y/N]";
std::cin >> answer;
std::cout << "\n"; switch( answer )
{
case 'Y':
case 'y':
std::cout << "ÎÒÏ뻹ÊDZðÁË, Êý¾Ý¶ªÁËÂèÂè»áÂîµÄ~" << "\n";
break; case 'N':
case 'n':
std::cout << "ÄúµÄÑ¡ÔñÊÇÕýÈ·µÄ, Ó²Å̲»ÄÜËæ±ã¸øÈ˸ñʽ»¯!" << "\n";
break; default:
std::cout << "ÇëÊäÈë[Y/N]»Ø´ðÎÊÌâ¡£" << "\n";
break;
} std::cout << "ÊäÈëÈÎÒâ¼ü½áÊø³ÌÐò!" << "\n";
std::cin.get();
std::cin.ignore(, '\n'); return ;
}

题目:

编写一个“温度单位转换程序”,提示用户以【xx.x C】或【xx.x F】的格式输入。

要求:

如果用户输入的是34.2 C 程序将自动转换为 90.32 F 并输出!

 #include <iostream>

 int main()
{
const unsigned short ADD_SUBTRACT = ;
const double RATIO = 9.0 / 5.0; float tempIn, tempOut;
char typeIn, typeOut; std::cout << "ÇëÒÔ¡¾xx.x C¡¿»ò¡¾xx.x F¡¿µÄÐÎʽÊäÈëζÈ: ";
std::cin >> tempIn >> typeIn;
std::cin.ignore(, '\n');
std::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; default:
typeOut = 'E';
break;
} if( typeOut != 'E' )
{
std::cout << tempIn << typeIn << " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout << "Çë°´ÕÕ¸ø³ö¸ñʽÊäÈë!" << "\n\n";
} std::cout << "ÇëÊäÈëÈÎÒâ×Ö·û½áÊø!" << "\n";
std::cin.get(); return ;
}

对输入数据进行合法性检查

“不要相信任何程序的输入,尤其是由用户输入的东西”,这是计算机安防工作的基本原则。

往好处说,非法输入会让程序变得毫无用处;

往坏处说,非法输入会导致程序甚至是整个系统崩溃。

因此,知道如何对输入数据进行合法性检查与知道如何接受输入数据同样重要。

这是我们这系列要研究的一个重要课题!

对输入数据进行合法性检查的具体做法取决于具体的变量类型和它们的取值范围。

比较常见的检查项目包括:

检查某个数值是不是一个正数(例如商品的价格、老妈的年龄、老婆的体重)

检查某个数值是不是落在给定的范围(例如女朋友的年龄不能小于0或者大于120吧?)

检查某个字符是不是一个特定的值(例如前边的Y或者N)

前边的程序中我们已经见过了一些用来进行合法性检查的代码,例如question1和question2程序中使用switch()来判断用户是否输入了程序预期的值。

但是呢,还有一些潜伏的问题我们没有发掘出来:例如cin调用失败(无法把一个值赋值给一个变量)时,程序仍会像cin调用成功一样继续自欺欺人。举例……

解决这些问题的办法之一就是对cin 调用的结果不要做任何假设。

cin 对象有几个专门用来报告其工作情况的成员函数,它们将返回一个真/假值来表明cin 的状态。

eof():如果到达文件(或输入)末尾,返回true;

fail():如果cin 无法工作,返回true;

bad():如果cin 因为比较严重的原因(例如内存不足)而无法工作,返回true;

good():如果以上情况都没发生,返回true。

最新文章

  1. PhotoView实现图片随手势的放大缩小的效果
  2. MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件
  3. Oracle排序问题
  4. 日历控件table布局
  5. Google App Engine Deployment 相关问题
  6. Pyhon之常用操作符 - 零基础入门学习Python006
  7. HDU - 4944 FSF’s game
  8. maven的聚合和继承
  9. 机器学习——交叉验证,GridSearchCV,岭回归
  10. vue(3)—— vue的全局组件、局部组件
  11. 牛客网:将两个单调递增的链表合并为一个单调递增的链表-Python实现-两种方法讲解
  12. IIS的启动与停止命令
  13. Filte过滤器
  14. vue_模板渲染
  15. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求(转)
  16. Java远程通讯技术及原理分析
  17. 第18章 SysTick—系统定时器
  18. C# 读取txt文件内容
  19. php unset变量
  20. Linux终端里的记录器

热门文章

  1. Es6 Promise 用法详解
  2. 最接近原生APP体验的高性能前端框架-MUI
  3. eclipse建立一个jsp项目遇到的问题及解决
  4. PHP程序员40点陋习
  5. 【转】python os.popen 超时问题
  6. ubuntu中安装ftp服务器
  7. YYModel学习总结YYClassInfo(1)
  8. Mysql数据库导出数据字典文档Word或者HTML的3个工具
  9. 中秋H5,这篇脑洞开的可以!
  10. WPF DataGrid自动生成序号