C++ 正确使用操作员>&燃气轮机;同一输入流上的后续时间

C++ 正确使用操作员>&燃气轮机;同一输入流上的后续时间,c++,c++11,input,stringstream,C++,C++11,Input,Stringstream,我正在编写一些代码,以便从文件中读取一些参数值 我知道如果,比方说,我有一个stringstream对象stream从字符串“10”创建,我可以初始化一个定义为int var1的数值变量只需键入: stream >> var1; 如果现在我的stringstream对象是从字符串“10;3;4.5;3.2;”创建的,我有四个变量声明如下: int var1; int var2; double var3; double var4; 我可以这样写吗: stream >>

我正在编写一些代码,以便从文件中读取一些参数值

我知道如果,比方说,我有一个
stringstream
对象
stream
从字符串
“10”
创建,我可以初始化一个定义为
int var1的数值变量只需键入:

stream >> var1;
如果现在我的
stringstream
对象是从字符串
“10;3;4.5;3.2;”
创建的,我有四个变量声明如下:

int var1;
int var2;
double var3;
double var4;
我可以这样写吗:

stream >> var1;
stream >> var2;
stream >> var3;
stream >> var4;
为了初始化该流中的所有四个变量?或者我唯一的选择是实现一个简单的解析器,一次提取一个值,然后将该值存储到每个值中

嗯,事实上我试过了,但没用
var1
已正确初始化,但其他变量均已初始化为0


你能解释一下为什么这不起作用吗?提前感谢您的帮助。

使用streams有点棘手,但同时也很有趣。 要使用stringstreams解析此代码,只需稍微修改代码以考虑分号。以下是如何:

//  stream = "10;3;4.5;3.2;"
stream >> var1;
//  stream = ";3;4.5;3.2;"
//  now if you will input stream >> var2,
//  will extract till the next integer value exists.
//  But here, since character ';' and not an integer, it won't pass any value to var2.
//  To correct it, add this line to take are of the ';' :
char ch;
stream >> ch;
stream >> var2 >> ch;
stream >> var3 >> ch;
stream >> var4;
要理解这一点,您需要更好地理解流如何从输入缓冲区提取输入。我试着一步一步地解释它

要更好地理解此主题,请参阅:

抱歉,我对流的了解还不够透彻,无法给出解释,但也许这个问题的答案(声明;作为空白字符)有助于您编写自己的解析器:不会解释为什么会失败,但会向您展示如何做到这一点。只需将
替换为
因为您有分号分隔的数据,而不是逗号分隔的数据。