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.カードに「Angel」のテキストが含まれています

2. カードに「Devil」というテキストが含まれている

3.カードに「Firaxis」というテキストが含まれています

4.カードには「Robert」というテキストが含まれています

これは私が得る出力です:

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」); ループの後へ。コンソールに出力したいだけなら、stringstream も必要ありません。

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 に答える