鱼C论坛

 找回密码
 立即注册
查看: 2496|回复: 1

[技术交流] C++(6th):temperature exchange(without wrong)

[复制链接]
发表于 2021-2-3 20:21:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一叶枫残 于 2021-2-8 18:03 编辑

温度转换程序(有防错误手段)

  1. #include <iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         float tem;
  6.         char c,l;
  7.         cout << "请输入温度(摄氏度后面加C,华氏度后面加F):" << endl;
  8.        
  9.         if ( cin >> tem )
  10.         {
  11.                 while((c = cin.peek()) == ' ')
  12.                 {
  13.                         cin.get();
  14.                 }
  15.                
  16.                 cin.get();               //把第一个字符去除
  17.                
  18.                 while((l = cin.peek()) == ' ')       //如果有第二个字符,提取给l
  19.                 {
  20.                         cin.get();
  21.                 }        
  22.                
  23.                 if(( c == 'F' || c == 'f' ) && (int)l == 10)
  24.                 {
  25.                         cout << "输出的温度为:" << (tem - 32)/1.8  << 'C' << endl;
  26.                 }
  27.                 else if( (c == 'C' || c == 'c')  && (int)l == 10 )
  28.                 {
  29.                         cout << "输出的华氏度为:" << tem * 1.8 + 32 << 'F' << endl;
  30.                 }
  31.                 else
  32.                 {
  33.                         cout << "输入错误;" << endl;
  34.                 }
  35.         }
  36.        
  37.         else
  38.         {
  39.                 cout << "输入错误;" << endl;       
  40.         }
  41.         cin.clear();
  42.         cin.ignore( 100 , '\n');
  43.         cout << "输入任意字符结束程序:" << endl;
  44.        
  45.         cin.get();
  46.        
  47.         return 0;
  48. }


复制代码

程序解读:
对于最外面的if ( cin >> tem ) else,判断的是输入的前面字符是否是数字
如果不是,输出错误
  1. else
  2. {
  3.         cout << "输入错误;" << endl;
  4. }
复制代码

如果是数据:
tem提取了数字后进入一个while循环,用于清空空格字符并把遇到的第一个字符储存到 c 里面
  1. while((c = cin.peek()) == ' ')
  2. {
  3.         cin.get();
  4. }
复制代码

然后用一个cin.get()把第一个字符给去掉,第二个while循环去除第一个字符后的空格字符,把除空格字符外遇到的第一个字符储存,如果没有遇到第二个字符,l 转换为整型( (int)l )默认值为10,给下面的if提供判断手段
  1. while((l = cin.peek()) == ' ')   
  2. {
  3.         cin.get();
  4. }
复制代码


接下来利用判断l和c的值来选择输出方式
  1. if(( c == 'F' || c == 'f' ) && (int)l == 10)
  2. {
  3.         cout << "输出的温度为:" << (tem - 32)/1.8  << 'C' << endl;
  4. }
  5. else if( (c == 'C' || c == 'c')  && (int)l == 10 )
  6. {
  7.         cout << "输出的华氏度为:" << tem * 1.8 + 32 << 'F' << endl;
  8. }
  9. else
  10. {
  11.         cout << "输入错误;" << endl;
  12. }
复制代码


到最后使用cin.clear()清空缓冲区,用ignore清空回车字符,给出提示后用cin.get()输入字符退出程序
  1. cin.clear();
  2. cin.ignore( 100 , '\n');
  3. cout << "输入任意字符结束程序:" << endl;

  4. cin.get();

  5. return 0;
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-3 20:26:44 | 显示全部楼层
今天肩膀痛了一整天,动一动就痛,所以没更新多少,只写了个温度转换程序,请谅解!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-2 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表