0

所以,我有这个循环:

int counter1 = 0;
ifstream incard;
string card;
string cardname;
stringstream out;
while (counter1 < 4) {
      counter1 = counter1 + 1;
      out << counter1;
      out << ".card";
      card = out.str();
      cout << card;
      system("PAUSE");
      incard.open(card.c_str());
      incard >> cardname;
      cout << cardname << endl;
      incard.close();
      out.str("");
      }

1.card包含文字“天使”

2.card包含文字“Devil”

3.card包含文字“Firaxis”

4.card包含文字“罗伯特”

这是我得到的输出:

1.cardPress any key to continue . . .
Angel  
2.cardPress any key to continue . . .
Devil
3.cardPress any key to continue . . .
Devil
4.cardPress any key to continue . . .
Devil

谁能帮我弄清楚我做错了什么,为什么它没有读取超过 2.card 的任何一个卡文件?

4

2 回答 2

0

我猜流在某个时候进入 eof 状态,从那时起尝试读取什么都不做。你要么需要重置你的流,或者更好的是,把它放在循环中。

一般来说,声明变量尽可能接近它们的用途。

for (int counter1 = 1; counter1 <= 4: ++counter1) {
    stringstream out;
    out << counter1 << ".card";
    string card = out.str();
    cout << card;
    system("PAUSE");
    ifstream incard(card.c_str());
    string cardname;
    incard >> cardname;
    cout << cardname << endl;
}

请注意这如何节省您重置事物的代码。

于 2013-05-06T19:52:10.743 回答
0

incard.open("")将尝试使用文件名“1.card”再次打开文件,这可能不是您想要的(?)您可能还想移动系统(“PAUSE”);到循环之后。如果您只想将它​​打印到控制台,您也不需要字符串流。

int counter1 = 0;
ifstream incard;
string card;
string cardname;
incard.open(card.c_str());

while (counter1 < 4) {
      counter1++; // Lots shorter than coutner1 = counter1 + 1, but does the same.
      incard >> cardname;
      cout <<  counter1 << ".card : " << cardname << endl;
}

incard.close();
system("PAUSE"); 
于 2013-05-06T19:19:33.683 回答