我正在读取一个文件,并在此.dat文件中间有一个标记。第一部分是变量和它们要分配的值。我得到变量,它们的价值很好。这就是我所拥有的。
int main() {
ifstream infile;
string variable;
int value;
infile.open("test.dat");
while (infile.peek() != EOF) {
infile >> variable;
infile >> value;
}
return 0;
}
这是.dat文件
f 32
h 3
l -2
q 3
v 5
$
lqv
hfv
vvf
vfl
我的第一个想法是使用while循环。那是while (variable != "$")
,但是当我这样做时,我会陷入无限循环。所以我完全迷失了如何获取和分配变量,然后获取.dat文件的其余部分。
由于我不想对变量进行硬编码这一事实,我不得不稍微改变一下。我将使用2个循环。一个在$之前,一个在$之后。当我尝试while (infile != "$")
时,我得到一个无限循环。
答案 0 :(得分:1)
我建议如下,读取第一个变量名称,如果需要,请读取值:
while (infile >> variable)
{
if (variable != "$")
{
infile >> value;
}
else
{
break;
}
}
std::map
对将变量名与值相关联非常有用:
std::map<std::string, double> dictionary;
while (infile >> variable)
{
if (variable != "$")
{
infile >> value;
dictionary[variable] = value;
}
else
{
break;
}
}
语法infile >> variable
是一种从文件中读取的更可靠的方法。
答案 1 :(得分:0)
您可以替换
while (infile.peek() != EOF) {
infile >> variable;
infile >> value;
...
}
通过
while (infile.good()) {
infile >> variable;
if (variable != "$" && variable.length() > 0) {
infile >> value;
switch (variable[0]) {
...
}
}
else
break;
}
这应避免无限循环。
答案 2 :(得分:0)
您可以检查下一个字母是否是&#39; $&#39;或EOF,但在&#34;&gt;&gt;&#34;你需要为\ n。
添加一个get ifstream file("test.dat");
int value;
string variable;
while(file.peek() != '$')
{
file >> variable;
file >> value;
while(file.get() != '\n' && file.good()); // '\n'
if(!file.good()) break;
}
这只有在你真正知道文件的结构时才有效,否则你应该阅读行并扫描你需要的内容。