2013-05-06 110 views
0

所以,我有这样的循环:infile.open拒绝读取变量文件

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包含文本 “魔鬼”

3.card包含文本 “Firaxis”

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

这为t他输出我得到:

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一些轻?

回答

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"); 
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; 
} 

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