所以,我得到了如下代码:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
char c;
ifstream f("test.txt");
char n;
char z;
char o;
int output;
istringstream in;
string line;
while (getline(f, line))
{
in.str(line);
do
{
c = in.get();
}
while (isspace(c));
in.unget();
in >> n >> c >> z >> c >> o >> c >> output;
cout << n << z << o << output << endl;
in.str(string());
}
f.close();
return 0;
}文件test.txt包含:
A,B,C,1
B,D,F,1
C,F,E,0
D,B,G,1
E,F,C,0
F,E,D,0
G,F,G,0文本文件中每一行的格式都是"char,bool“(我暂时忽略了行中间可能有空格的事实)。
当我编译并运行这段代码((使用Visual Studio 2010)时,我得到:
ABC1
ABC1
ABC1
ABC1
ABC1
ABC1
ABC1显然,这不是我想要的。有没有人知道这是怎么回事?
发布于 2013-05-03 03:14:52
一个快速的解决方法是,将istringstream放入循环中以重置输入指示器:
//istringstream in; ----------+
string line; |
while (getline(f, line)) |
{ |
istringstream in; <--------+
in.str(line);
do
{
c = in.get();
}
while (isspace(c));
in.unget();
in >> n >> c >> z >> c >> o >> c >> output;
cout << n << z << o << output << endl;
//in.str(string()); <-------------------- you can remove this line
}
f.close();如果您不重置输入指示器,in.get将不会像您预期的那样工作。或者,您可以简单地使用seekg(0)
发布于 2013-05-03 03:15:16
当您更改字符串流的内容时,默认情况下,它会将位置指针设置为流的末尾:http://www.cplusplus.com/reference/sstream/stringstream/str/。在in.str(line);之后添加in.seekg(0);,它应该可以工作:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
char c;
ifstream f("test.txt");
char n;
char z;
char o;
int output;
istringstream in;
string line;
while (getline(f, line))
{
in.str(line);
in.seekg(0);
do
{
c = in.get();
}
while (isspace(c));
in.unget();
in >> n >> c >> z >> c >> o >> c >> output;
cout << n << z << o << output << endl;
in.str(string());
}
f.close();
return 0;
}https://stackoverflow.com/questions/16345887
复制相似问题