使用sstream解析char数组中的整数时,我困了几个小时。 我不知道在while循环中为什么还要再进行一次迭代。
//main.cpp
#include <iostream>
#include <sstream>
int main()
{
char data[5] = "1 23";
//char data[4] = {'1', ' ', '2', '3'}; another attempt
std::stringstream stream;
stream << data;
int count = 1;
while (stream)
{
double x = 0;
stream >> x;
std::cout << count << " " << x << std::endl;
count++;
}
return 0;
}
程序输出显示:
1 1
2 23
3 0
我使用follow命令来编译程序。
g++ main.cpp
我认为有2个整数,所以只有2个迭代。我不知道为什么while循环中有3次迭代。我想这是因为char数组的末尾有'\ 0',但是我试过了,它得到了相同的结果。
有什么建议吗?谢谢。
答案 0 :(得分:2)
您没有检查stream >> x
是否成功:
if (stream >> x)
{
std::cout << count << " " << x << std::endl;
count++;
}
会做。
您还可以将其包括在循环中:
double x = 0;
while (stream >> x)
{
std::cout << count << " " << x << std::endl;
count++;
}
答案 1 :(得分:1)
我认为有2个整数,所以只有2个迭代。我不知道为什么while循环中有3次迭代。
用于流提取的常规模式是:
while(stream >> variable) { // or if for single extraction
// use the extracted variable
这样,您始终在使用提取的值之前检查提取是否成功。
char data[4] = {'1', ' ', '2', '3'}; another attempt
将非空终止的字符串插入流后,此尝试将具有未定义的行为。