当我查看您的代码时,我注意到的第一个问题是;
后面缺少分号
myfile >> string1
但这只是一个语法错误。
您尝试使用的 while 循环只会在两个条件都为真时评估,因为您正在使用&&
运算符。
正如@sftrabbit 所说>>
,C++ 中的提取运算符会在输入缓冲区中留下一个换行符\n
,然后在您尝试输入时
std::getline(myfile, string2) && myfile >> int1
第一个条件std::getline(myfile, string2)
在获取换行符时没有问题,并且将评估为 true,但第二个条件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;
}
我希望这可以帮助你。