当前位置: 首页 > news >正文

输出输入练习

 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

未完待续。。。 

相关文章:

  • 《数字图像处理》第四章 频率域滤波简要学习笔记以及频率域滤波与空间域滤波的区别
  • 构建稳健的机器学习系统:应对数据偏移挑战
  • Leetcode 交错字符串
  • [FPGA基础学习]加法器、三八译码器及DE2-115基本使用方法和数码管显示
  • (C语言)动态分配的动态通讯录(静态通讯录Plus)(C语言小项目)
  • 关于跨域问题(本地前端访问服务器端接口跨域出错)
  • Notepad++ 替换 换行符 为 逗号
  • 关于服务器只能访问localhost:8111地址,局域网不能访问的问题
  • AWE直击:萤石RX30 Max的吸泡面战争,一场清洁技术的范式革命
  • 分布式服务的熔断和降级
  • Unity Shader 学习17:合批渲染
  • Spring Boot 连接 MySQL 配置参数详解
  • 维创智脑(WIC)项目观察:技术集成的理想模型与现实难题
  • Containerd+Kubernetes搭建k8s集群
  • Mysql表中的字符编码到底怎么设置
  • ref和reactive区别
  • JS输出九九乘法表
  • Flink watermark的时间字段有空值,建表的时候,如何处理
  • C# 责任链模式全面讲解:设计思想与实际应用
  • LInux基础--ssh服务+日志管理
  • 全中国最好的十个博物馆展陈选出来了!
  • 精品消费“精”在哪?多在体验上下功夫
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话
  • 人形机器人灵犀X2掌握新技能:有了“内心戏”,还会拳脚功夫
  • 浙江省台州市政协原副主席林虹被“双开”
  • 《求是》杂志发表习近平总书记重要文章《锲而不舍落实中央八项规定精神,以优良党风引领社风民风》