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。

c++学习笔记---05--- C++输出输入小结的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  2. matlab学习笔记5--低级文件输入输出函数

    一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...

  3. C++ GUI Qt4学习笔记05

    C++ GUI Qt4学习笔记05   qtc++正则表达式 QIntValidator           --  只让用户输入整数 QDoubleValidator     --  只让用户输入浮 ...

  4. Windows phone 8 学习笔记(1) 触控输入

    原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...

  5. 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)

     本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder  微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...

  6. 【Visual C++】游戏编程学习笔记之七:键盘输入消息

     本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder  微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...

  7. stm32寄存器版学习笔记05 PWM

    STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...

  8. vue学习笔记(六)表单输入绑定

    前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...

  9. Bash脚本编程学习笔记05:用户交互与脚本调试

    用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...

随机推荐

  1. oracle pl/sql 简介

    一.pl/sql 是什么pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展.pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语 ...

  2. [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)

    接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...

  3. Java 中与(&)短路与(&&)以及 或(|)短路或(||)的关系

    一.逻辑运算符的使用 1)逻辑运算符的连接的是布尔表达式,要与位运算符做区分. 2)使用方法: public class Test {  public static void main(String[ ...

  4. WebSocket 开发模拟客户端与有游戏服务器通信

    WebSocket 客户端测试功能 websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了w ...

  5. 关于js浮点数计算精度不准确问题的解决办法

    今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精 ...

  6. OpenJudge_1321:棋盘问题

    题目描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆 ...

  7. windows下怎么解决Python双版本问题

    相信大家会在windows下会遇到Python双版本问题 当我们装了Python2和Python3时我们好只能在命令栏调出最高版本的那个低版本的难道消失了吗?今天我们就解决这个问题! 1.下载 我们在 ...

  8. java关键字中文对比

    abstract 摘要|抽象assert 声称boolean 布尔break 中断byte 字节case 实例catch 捕捉char 烧焦class 类const 常量continue 持续defa ...

  9. Elixir游戏服设计二

    搞一个例子,而没有实际的目标,做起来真是烦人.几次三番都想放弃. 后来想想,即使最后完成不了完整的服务器,把需要的知识点搞搞,摸熟悉也是好的. 这里没有完整的项目目录,主要是对需要的指点进行整理.要完 ...

  10. asp.net提高程序性能的技巧(一)

    [摘 要] 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多的信息请参考<Improving ASP.NET Pe ...