lo板蓝根 发表于 2020-4-29 11:50:02

怎么解决输入流没有得到对应类型输入而持续等待的问题,求大佬解答,感谢

这是那个温度转换的程序,要求输入要以c或f结尾,但是如果末尾没有字符(比如直接只输入数字),type得不到输入就会一直等待,要怎么解决?
#include <iostream>

using namespace std;

int main()
{   float value;
    char type;
    float nvalue;
    cout.precision(4);
    int a=0;
    do
      {a=0;
      cin>>value>>type;
      switch(type)
            {case'F':
            case'f':nvalue=value-32/1.8; cout<<nvalue<<'C'<<endl;break;
            case'C':
            case'c':nvalue=value*1.8+32;cout<<nvalue<< 'F'<<endl;break;
            default: a=1;cout<<"输入格式错误\n请重新输入:"<<endl;break;
            }
      }
    while(a);
    cout<<"输入任意字符结束"<<endl;

   return 0;
}


SugarCane88 发表于 2020-4-29 14:26:06

程序本身要求输入两个信息,输入一个肯定不行,如果没有按格式输入就是 default的内容了。

lo板蓝根 发表于 2020-5-5 10:25:52

SugarCane88 发表于 2020-4-29 14:26
程序本身要求输入两个信息,输入一个肯定不行,如果没有按格式输入就是 default的内容了。

这个我知道,但是如果我想让只输入数字也会报错,并且能进行下一次输入要怎么改呢?

superbe 发表于 2020-5-6 11:44:35

把value和type分开来处理吧。
#include <iostream>
using namespace std;

int main()
{
    float value;
    char type;
    float nvalue;
    cout.precision(4);
    int a = 0;
    cout << "输入温度(以C,c,F,f结尾): " << endl;
    do
    {
      a = 0;
      cin >> value;
      if (cin.fail()) {
            a = 1; cout << "输入格式错误\n请重新输入:" << endl;
            cin.clear(); while (cin.get() != '\n');
            continue;
      }
      cin.get(type);
      switch (type)
      {
      case'F':
      case'f':
            nvalue = value - 32 / 1.8; cout << nvalue << 'C' << endl; break;
      case'C':
      case'c':
            nvalue = value*1.8 + 32; cout << nvalue << 'F' << endl; break;
      default:
            a = 1; cout << "输入格式错误\n请重新输入:" << endl;
            if(type != '\n') while (cin.get() != '\n'); break;
      }
    } while (a);
    cout << "输入任意字符结束" << endl;

    return 0;
}
页: [1]
查看完整版本: 怎么解决输入流没有得到对应类型输入而持续等待的问题,求大佬解答,感谢