我想知道 WTF 我的 while 循环调用 istream& getline ( istream& is, string& str ); 继续阅读同一行。我有以下调用getline的while循环(嵌套在几个级别的其他while循环和if语句中),但我的输出语句是while循环代码块中的第一个代码行告诉我它正在读取同一行并且再说一遍,这就解释了为什么我的程序完成后我的输出文件不包含正确的数据。
while (getline(file_handle, buffer_str)) {
cout<< buffer_str <<endl;
cin.get();
if ((buffer_str.find(';', 0) != string::npos) && (buffer_str.find('\"', 0) != string::npos)) { //we're now at the end of the 'exc' initialiation statement
buffer_str.erase(buffer_str.size() - 2, 1);
buffer_str += '\n';
for (size_t i = 0; i < pos; i++) {
buffer_str += ' ';
}
buffer_str += "throw(exc);\n";
for (size_t i = 0; i < (pos - 3); i++) {
buffer_str += ' ';
}
buffer_str += '}';
}
else if (buffer_str.find(search_str6, 0) != string::npos) { //we're now at the second problem line of the first case
buffer_str += " {\n";
output_str += buffer_str;
output_str += '\n';
getline(file_handle, buffer_str); //We're now at the beginning of the 'exc' initialiation statement
output_str += buffer_str;
output_str += '\n';
while (getline(file_handle, buffer_str)) {
if ((buffer_str.find(';', 0) != string::npos) && (buffer_str.find('\"', 0) != string::npos)) { //we're now at the end of the 'exc' initialiation statement
buffer_str.erase(buffer_str.size() - 2, 1);
buffer_str += '\n';
for (size_t i = 0; i < pos; i++) {
buffer_str += ' ';
}
buffer_str += "throw(exc);\n";
for (size_t i = 0; i < (pos - 3); i++) {
buffer_str += ' ';
}
buffer_str += '}';
}
output_str += buffer_str;
output_str += '\n';
if (buffer_str.find("return", 0) != string::npos) {
getline(file_handle, buffer_str);
output_str += buffer_str;
output_str += '\n';
about_to_break = true;
break; //out of this while loop
}
}
}
if (about_to_break) {
break; //out of the level 3 while loop (execution then goes back up to beginning of level 2 while loop)
}
output_str += buffer_str;
output_str += '\n';
}
由于这个问题,我的 if 语句和我的循环中的 else 语句没有按应有的方式运行,并且它不会在应该的时候跳出该循环(尽管它最终会跳出它,但我没有不知道到底是怎么回事)。
任何人都知道可能导致此问题的原因是什么?
提前致谢。