0

我试图在一个文件中打印出 3 行,但最终发生的是它在所有 3 个位置打印 1 行,在所有三个位置打印第二行,然后,好吧,你猜对了,与第 3 个。我希望它只需按一下按钮就可以打印出所有 3 行。

ifstream read_file;
 string fname, name;
 cout << "Type the complete address of the file you would like to open.\n";
 cin >> fname;
 system("cls");
 read_file.open(fname.c_str());

 while(getline(read_file, fname))

 {
if (fname == "")continue;

cout << "You had "<< fname << " health left\n";
cout << "You delt " << fname  << " damage\n";
cout << "There were " << fname << " enemies left\n";
system("pause");
}


 read_file.close();
 system("pause");
4

2 回答 2

4

查看您的代码

while(getline(read_file, fname))   
{
    if (fname == "")
        continue;

    cout << "You had "<< fname << " health left\n";
    cout << "You delt " << fname  << " damage\n";
    cout << "There were " << fname << " enemies left\n";
    system("pause");
}

很明显,您只阅读了一行,并打印了三遍——您fname在这些输出之间没有做任何事情。

我建议您停止将同一个变量用于多种目的,这是许多错误的根源。
(以下假设没有空行。)

string health;
string damage;
string enemies;
while(getline(read_file, health) && getline(read_file, damage) && getline(read_file, enemies))   
{
    cout << "You had "<< health << " health left\n";
    cout << "You delt " << damage  << " damage\n";
    cout << "There were " << enemies << " enemies left\n";
}

如果文件中有空行,请考虑编写您自己的getnonemptyline跳过空行的函数。

于 2013-05-06T15:05:41.050 回答
0

就像 molbdnilo 所说,你只是从文件中读取一行,然后尝试用它做三件事。如果你想继续重复使用相同的(奇怪的命名)变量,你可以这样做

while(getline(read_file, fname)){
    if (fname == "")continue;
    cout << "You had "<< fname << " health left\n";
}

while(getline(read_file, fname)){
    if (fname == "")continue;
    cout << "You delt " << fname  << " damage\n";
}

while(getline(read_file, fname)){
    if (fname == "")continue;
    cout << "There were " << fname << " enemies left\n";
}

system("pause");
于 2013-05-06T15:29:55.003 回答