鱼C论坛

 找回密码
 立即注册
查看: 3066|回复: 5

一个关于cin的问题

[复制链接]
发表于 2013-8-29 18:00:06 | 显示全部楼层 |阅读模式

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

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

x
#include<iostream>
int main()
{
const double A=9.0/5.0,B=32;
double tempin,tempout;
char typein,typeout;
std::cout<<"请输入温度:"<<std::endl;
std::cin>>tempin>>typein;
std::cin.ignore(100,'\n');
switch(typein)
{
  case 'C':
  case 'c':
  tempout=tempin*A+B;
  typeout='F';
  std::cout<<tempout<<" "<<typeout<<std::endl;
  break;
  case 'F':
  case 'f':
  tempout=(tempin-B)/A;
  typeout='C';
  std::cout<<tempout<<" "<<typeout<<std::endl;
  break;
  default:
  typeout='E';
  break;
   
}
if(typeout=='E')
{
  std::cout<<"输入格式不对!!"<<std::endl;
}
return(0);
}
这个程序中cin>>tempin>>typeout;这句假如我只输入一个字符c因为tempin是整形所以无法提取字符c但是c还应该在输入流中,不是应该被typein提取吗为何程序会提示输入格式不对。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-29 18:52:09 | 显示全部楼层
cin>>tempin读入字符后,cin流就“坏”了,自动忽略后面所有对cin的操作。因此
在std::cin>>tempin>>typein;后要判断:
if(!cin) cin.clear();将cin从错误状态恢复再进行后续操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-29 19:16:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-30 09:29:31 | 显示全部楼层
仰望天上的光 发表于 2013-8-29 18:52
cin>>tempin读入字符后,cin流就“坏”了,自动忽略后面所有对cin的操作。因此
在std::cin>>tempin>>typei ...

这样的话是不是一个程序中只要第一个cin出错后面cin都不会执行那岂不是绝大多数用cin时都要进行检查是否成功执行cin?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-30 21:20:34 | 显示全部楼层
矢口╰+雲℡淡 发表于 2013-8-30 09:29
这样的话是不是一个程序中只要第一个cin出错后面cin都不会执行那岂不是绝大多数用cin时都要进行检查是否成 ...

理论上,是这样的。但一般我们的console程序都是自己用,不给别人用,所以一般情况都善意假设不会输入错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-30 22:39:45 | 显示全部楼层
这样的话是不是一个程序中只要第一个cin出错后面cin都不会执行那岂不是绝大多数用cin时都要进行检查是否成功执行cin?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-31 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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