|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 一叶枫残 于 2021-2-8 18:03 编辑
温度转换程序(有防错误手段)
- #include <iostream>
- using namespace std;
- int main()
- {
- float tem;
- char c,l;
- cout << "请输入温度(摄氏度后面加C,华氏度后面加F):" << endl;
-
- if ( cin >> tem )
- {
- while((c = cin.peek()) == ' ')
- {
- cin.get();
- }
-
- cin.get(); //把第一个字符去除
-
- while((l = cin.peek()) == ' ') //如果有第二个字符,提取给l
- {
- cin.get();
- }
-
- if(( c == 'F' || c == 'f' ) && (int)l == 10)
- {
- cout << "输出的温度为:" << (tem - 32)/1.8 << 'C' << endl;
- }
- else if( (c == 'C' || c == 'c') && (int)l == 10 )
- {
- cout << "输出的华氏度为:" << tem * 1.8 + 32 << 'F' << endl;
- }
- else
- {
- cout << "输入错误;" << endl;
- }
- }
-
- else
- {
- cout << "输入错误;" << endl;
- }
- cin.clear();
- cin.ignore( 100 , '\n');
- cout << "输入任意字符结束程序:" << endl;
-
- cin.get();
-
- return 0;
- }
-
复制代码
程序解读:
对于最外面的if ( cin >> tem ) else,判断的是输入的前面字符是否是数字
如果不是,输出错误
- else
- {
- cout << "输入错误;" << endl;
- }
复制代码
如果是数据:
tem提取了数字后进入一个while循环,用于清空空格字符并把遇到的第一个字符储存到 c 里面
- while((c = cin.peek()) == ' ')
- {
- cin.get();
- }
复制代码
然后用一个cin.get()把第一个字符给去掉,第二个while循环去除第一个字符后的空格字符,把除空格字符外遇到的第一个字符储存,如果没有遇到第二个字符,l 转换为整型( (int)l )默认值为10,给下面的if提供判断手段
- while((l = cin.peek()) == ' ')
- {
- cin.get();
- }
复制代码
接下来利用判断l和c的值来选择输出方式
- if(( c == 'F' || c == 'f' ) && (int)l == 10)
- {
- cout << "输出的温度为:" << (tem - 32)/1.8 << 'C' << endl;
- }
- else if( (c == 'C' || c == 'c') && (int)l == 10 )
- {
- cout << "输出的华氏度为:" << tem * 1.8 + 32 << 'F' << endl;
- }
- else
- {
- cout << "输入错误;" << endl;
- }
复制代码
到最后使用cin.clear()清空缓冲区,用ignore清空回车字符,给出提示后用cin.get()输入字符退出程序
- cin.clear();
- cin.ignore( 100 , '\n');
- cout << "输入任意字符结束程序:" << endl;
- cin.get();
- return 0;
复制代码
|
|