2934062352 发表于 2017-3-15 12:17:41

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

#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 重新输入数值呢??

fc1735 发表于 2017-3-16 20:39:20

if(cin.get()=='n'||'N')
'N'为一真值,此if恒为真,把这里条件判断改一下就可以了
你这样写的意思是
cin.get()=='n' 为真
或'N'为真,但'N'的ascii码是大于0的,即恒为真

2934062352 发表于 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()这一项了

fc1735 发表于 2017-3-17 04:24:21

改成
if(c=='n'||c=='N')
{
      flag=true;
}
{:10_262:}

2934062352 发表于 2017-3-17 11:36:33

fc1735 发表于 2017-3-17 04:24
改成
if(c=='n'||c=='N')
{


的确,不过还是不行,卡在while语句里出不去,似乎程序进入走到cin.get()那里的时候直接略过了???

2934062352 发表于 2017-3-17 11:38:26

fc1735 发表于 2017-3-17 04:24
改成
if(c=='n'||c=='N')
{


就是随便一个不符合的输入,程序到cin.get的时候不会让你再重键盘上输入一个字符,而是直接走到结束了...

fc1735 发表于 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;

加上红色的部分

2934062352 发表于 2017-3-17 22:21:20

fc1735 发表于 2017-3-17 12:53
cin.clear();
cin.ignore(100,'\n');
if(c=='n'||c=='N')


可以了!谢谢你的帮助。
页: [1]
查看完整版本: 关于C++里面的温度转换题