c++学习笔记---05--- C++输出输入小结
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++输出输入小结的更多相关文章
- 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归
机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...
- matlab学习笔记5--低级文件输入输出函数
一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...
- C++ GUI Qt4学习笔记05
C++ GUI Qt4学习笔记05 qtc++正则表达式 QIntValidator -- 只让用户输入整数 QDoubleValidator -- 只让用户输入浮 ...
- Windows phone 8 学习笔记(1) 触控输入
原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...
- 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- 【Visual C++】游戏编程学习笔记之七:键盘输入消息
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- stm32寄存器版学习笔记05 PWM
STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...
- vue学习笔记(六)表单输入绑定
前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...
- Bash脚本编程学习笔记05:用户交互与脚本调试
用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...
随机推荐
- 100%解决ios上audio不能自动播放的问题
由于ios的安全机制问题,不允许audio和video自动播放,所以想要使audio标签自动播放那是实现不了的,即使给play()也是播放不了. 解决方法: 首先,创建audio标签:<audi ...
- CentOS 引导 Win10 启动项
因为无聊,所以想尝试一下双系统,所以在win10的基础之上,装了一个Linux系统,之前装过Ubuntu,几乎都是自动完成的无任何压力.但是想着Ubuntu好像更新换代有点快,所以换了个能用比较久的C ...
- hdu1524博弈SG
A Chess Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- 张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED
感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧.其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊.百度也搜不 ...
- 关于如何获取iframe中的元素
今天研究了一下iframe中元素的获取,发现有些地方还是有点坑的. 首先:如果使用纯前端手段,是没有办法获取非同源的iframe中的元素的,后面会提到后端手段 一.同源环境 1.首先在父页面获取ifr ...
- Centos7虚拟机桥接模式
主机ping不通虚拟机centos7系统的ip大多有以下原因: 1.主机与centos7ip段对应 (关键是网关.dns服务器要一一对应,具体操作见后文) 2.对应后仍然不通的,可关闭主机与cenos ...
- eslint使用
参考文档 http://www.cnblogs.com/hahazexia/p/6393212.html http://blog.guowenfh.com/2016/08/07/ESLint-Rule ...
- webpack2使用ch9-处理模板文件 .html .ejs .tpl模板使用
1 目录展示 安装依赖 "ejs-loader": "^0.3.0","html-loader": "^0.4.5", ...
- GBK和UTF8有什么区别
GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符. UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多 ...
- 在SQL中用正则表达式替换html标签(2)
由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...