我正在尝试将以下文本文件读入不同的变量:
title
subject name
123
subject2 name
124
subject3 name
125
到目前为止我一直在使用下面的代码
ifstream myfile;
myfile.open("filename.txt");
......etc
myfile >> string1
while(myfile >> string2 && myfile >> int1){
cout << "read string " << string2 << "and int " << int1 << endl;
}
此方法似乎不喜欢“主题名称”之间的空格,并且它没有提取,因此它不会运行 while 循环。有没有简单的方法可以解决这个问题?
最佳答案
我在查看您的代码时注意到的第一个问题是缺少分号 ;
在
myfile >> string1
但这只是一个语法错误。
您尝试使用的 while 循环只会在两个条件都为真时进行评估,因为您正在使用 &&
运营商。
正如@sftrabbit 所说的提取运算符 >>
在 C++ 中
留下换行符 \n
在输入缓冲区中,然后当您尝试输入时
std::getline(myfile, string2) && myfile >> int1
第一个条件std::getline(myfile, string2)
获取换行符没有问题并且会评估为真,但是第二个条件 myfile >> int1
将计算为 false,因为它在期望整数时会得到一个字符。这就是为什么您的 while 循环不想执行的原因。
当您更改提取运算符时,您可以轻松解决此问题
myfile >> string1
与 getline(myfile, string1);
因为 getline 将留下一个空的输入缓冲区。
但是你会遇到另一个问题。 while 循环只会再次执行一次,因为输入缓冲区中还剩下\n,因此您需要一个 myfile.ignore(numeric_limits<streamsize>::max(), '\n');
。 .
你的最终代码应该像这样:
int main ()
{
ifstream myfile;
string string1;
string string2;
int int1;
myfile.open("filename.txt");
getline(myfile, string1);
while(getline(myfile, string2) && myfile >> int1)
{
myfile.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "read string " << string2 << " and int " << int1 << endl;
}
return 0;
}
希望对你有帮助
关于c++ - 在 C++ 中读取带有空格的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409107/