鱼C论坛

 找回密码
 立即注册
查看: 1767|回复: 3

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

[复制链接]
发表于 2020-4-29 11:50:02 | 显示全部楼层 |阅读模式

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

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

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

  2. using namespace std;

  3. int main()
  4. {   float value;
  5.     char type;
  6.     float nvalue;
  7.     cout.precision(4);
  8.     int a=0;
  9.     do
  10.         {a=0;
  11.         cin>>value>>type;
  12.         switch(type)
  13.             {case'F':
  14.             case'f':nvalue=value-32/1.8; cout<<nvalue<<'C'<<endl;break;
  15.             case'C':
  16.             case'c':nvalue=value*1.8+32;cout<<nvalue<< 'F'<<endl;break;
  17.             default: a=1;cout<<"输入格式错误\n请重新输入:"<<endl;break;
  18.             }
  19.         }
  20.     while(a);
  21.     cout<<"输入任意字符结束"<<endl;

  22.    return 0;
  23. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 14:26:06 | 显示全部楼层
程序本身要求输入两个信息,输入一个肯定不行,如果没有按格式输入就是 default的内容了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 10:25:52 | 显示全部楼层
SugarCane88 发表于 2020-4-29 14:26
程序本身要求输入两个信息,输入一个肯定不行,如果没有按格式输入就是 default的内容了。

这个我知道,但是如果我想让只输入数字也会报错,并且能进行下一次输入要怎么改呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 11:44:35 | 显示全部楼层
把value和type分开来处理吧。
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     float value;
  6.     char type;
  7.     float nvalue;
  8.     cout.precision(4);
  9.     int a = 0;
  10.     cout << "输入温度(以C,c,F,f结尾): " << endl;
  11.     do
  12.     {
  13.         a = 0;
  14.         cin >> value;
  15.         if (cin.fail()) {
  16.             a = 1; cout << "输入格式错误\n请重新输入:" << endl;
  17.             cin.clear(); while (cin.get() != '\n');
  18.             continue;
  19.         }
  20.         cin.get(type);
  21.         switch (type)
  22.         {
  23.         case'F':
  24.         case'f':
  25.             nvalue = value - 32 / 1.8; cout << nvalue << 'C' << endl; break;
  26.         case'C':
  27.         case'c':
  28.             nvalue = value*1.8 + 32; cout << nvalue << 'F' << endl; break;
  29.         default:
  30.             a = 1; cout << "输入格式错误\n请重新输入:" << endl;
  31.             if(type != '\n') while (cin.get() != '\n'); break;
  32.         }
  33.     } while (a);
  34.     cout << "输入任意字符结束" << endl;

  35.     return 0;
  36. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 18:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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