一叶枫残 发表于 2021-2-3 20:21:51

C++(6th):temperature exchange(without wrong)

本帖最后由 一叶枫残 于 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;

一叶枫残 发表于 2021-2-3 20:26:44

今天肩膀痛了一整天,动一动就痛,所以没更新多少,只写了个温度转换程序,请谅解!
页: [1]
查看完整版本: C++(6th):temperature exchange(without wrong)