鱼C论坛

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

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

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

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

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

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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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