stringstream:dec int to hex to car conversion issue

时间:2016-04-18 04:32:38

标签: c++ char hex stringstream

当我遇到这个问题时,我正在尝试使用stringstream进行一些简单的练习。以下程序获取一个int数字,以十六进制格式将其保存在stringstream中,然后显示字符串中是否有十进制的int和char。 我为不同的输入运行它,但是对于其中一些输入它不能正常工作。 请参阅以下代码详细信息:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

int main() {
  int roll;
  stringstream str_stream;
  cout << "enter an integer\n";
  cin>>roll;
  str_stream << hex << roll;

  if(str_stream>>dec>>roll){ 
    cout << "value of int is " << roll << "\n";
  }
  else
    cout << "int not fount \n";
  char y;

  if(str_stream>>y){
    cout << "value of char is "<<  y << endl; 
  }
  else
    cout << "char not found \n";
  cout << str_stream.str() << "\n";
}

我为3个不同的输入运行它:  Case1: { enter an integer 9 value of int is 9 char not found 9

情况2: enter an integer 31 value of int is 1 value of char is f 1f

情形3: enter an integer 12 int not fount char not found c

案例1和2。程序正在按预期工作,但在案例3中,它应该找到一个char,我不知道为什么它无法在流中找到char。

此致 Navnish

1 个答案:

答案 0 :(得分:1)

如果if(str_stream>>dec>>roll)无法读取任何内容,则流的状态将设置为fail(false)。之后,除非使用clear()重置流的状态,否则使用该流的任何进一步读取操作都将不会成功(并返回false)。

所以:

 .....//other code
 if(str_stream>>dec>>roll){ 
    cout << "value of int is " << roll << "\n";
  }
  else
  {
    cout << "int not fount \n";
    str_stream.clear();//*******clears the state of the stream,after reading failed*********
  }
  char y;

  if(str_stream>>y){
    cout << "value of char is "<<  y << endl; 
  }
  else
    cout << "char not found \n";

....//other code