鱼C论坛

 找回密码
 立即注册
查看: 2769|回复: 7

关于C++里面的温度转换题

[复制链接]
发表于 2017-3-15 12:17:41 | 显示全部楼层 |阅读模式

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

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

x
#include<iostream>
using namespace std;
int main()
{
        const int TEMP_ADD = 32;
        const float TEMP_ST = 9.0/5.0;
        double T_in,T_out=0;
        char N_in,N_out='e';
        bool flag=false;
        while(!flag)
        {
        cout<<"请按照【xx.xx C】的形式或者【xx.xx F】的形式进行输入"<<endl;
        cin>>T_in>>N_in;
        switch(N_in)
        {
                case'c':
                case'C':T_out=T_in*TEMP_ST+TEMP_ADD;
                                N_out='F';
                                flag=true;
                                break;
                case'f':
                case'F':T_out=(T_in-TEMP_ADD)/TEMP_ST;
                                N_out='C';
                                flag=true;
                                break;
                default:cout<<"输入错误,是否重新输入?";
                                cin.ignore(100,'\n');
                                if(cin.get()=='n'||'N')
                                {
                                        flag=true;
                                }
                                break;
        }
        }
        cout<<T_in<<N_in<<'='<<T_out<<N_out<<endl;
        cout<<"按下任一键退出"<<endl;
        cin.ignore(100,'\n');
        cin.get();
        return 0;
}

如何在输入错误后可以输入一个n或N结束循环   或者一个y或Y 重新输入数值呢??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-16 20:39:20 | 显示全部楼层
if(cin.get()=='n'||'N')
'N'为一真值,此if恒为真,把这里条件判断改一下就可以了
你这样写的意思是
cin.get()=='n' 为真
或'N'为真,但'N'的ascii码是大于0的,即恒为真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-16 23:30:34 | 显示全部楼层
fc1735 发表于 2017-3-16 20:39
if(cin.get()=='n'||'N')
'N'为一真值,此if恒为真,把这里条件判断改一下就可以了
你这样写的意思是

代码改成
c=cin.get();
if(c=='n'||'N')
{
        flag=true;
}

输入错误后还是不行,程序直接结束,好像直接跳过cin.get()这一项了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 04:24:21 | 显示全部楼层
改成
if(c=='n'||c=='N')
{
        flag=true;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 11:36:33 | 显示全部楼层
fc1735 发表于 2017-3-17 04:24
改成
if(c=='n'||c=='N')
{

的确,不过还是不行,卡在while语句里出不去,似乎程序进入走到cin.get()那里的时候直接略过了???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 11:38:26 | 显示全部楼层
fc1735 发表于 2017-3-17 04:24
改成
if(c=='n'||c=='N')
{

就是随便一个不符合的输入,程序到cin.get的时候不会让你再重键盘上输入一个字符,而是直接走到结束了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 12:53:04 | 显示全部楼层
cin.clear();
cin.ignore(100,'\n');
if(c=='n'||c=='N')
{
        flag=true;
}
........

if(N_out!='e') cout<<T_in<<N_in<<'='<<T_out<<N_out<<endl;

加上红色的部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 22:21:20 | 显示全部楼层
fc1735 发表于 2017-3-17 12:53
cin.clear();
cin.ignore(100,'\n');
if(c=='n'||c=='N')

可以了!谢谢你的帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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