2013-01-09 62 views
1

我創建了一個文件hangman_word_collection.txt並將文件的所有內容存儲到字符串行中。從C++中的文件中讀取char字符串

現在我想在我的程序中使用行字符串,但line[0]沒有任何價值,或者我不知道它是否有內容。

我是新來的,請幫忙。

下面是代碼:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() { 
string line; 

ifstream myfile ("hangman_word_collection.txt"); 
if (myfile.is_open()) { 
    while (myfile.good()) { 
     getline (myfile,line); 
     cout << line << endl; 
    } 
} 
for(int i=0; i <= 79; i++) { 
    cout << "\n" << i; 
    cout << ":" << line[i]; 
} 
return 0; 
} 

和輸出:

actingraringbackupcampusdacoiteasilyfabricgardenhackediceboxprimeralwaysupload. 


0: 
1:c 
2:t 
3:i 
4:n 
5:g 
6:r 
7:a 
8:r 
9:i 
10:n 
11:g 
12:b 
13:a 
14:c 
15:k 
Press <RETURN> to close this window... 
+0

如果將最終的'cout'行更改爲'cout <<「:」<<(int)(line [i]);'它會打印一個數值嗎?如果是的話,它是幾號? –

+0

它正在打印打印一些號碼 Hello World! actingraringbackupcampusdacoiteasilyfabricgardenhackediceboxprimeralwaysupload。 0:0 1:99 :116 3:105 4:110 5:103 6:114 7:97 8:114 9:105 10:110 11:103 12:98 13:97 14:99 15:107按關閉此窗口... –

+0

是否有一些目的是在while循環中擺在首位。你只需要文件中的* last *行?看看你的初始輸出行後有多少空間。在那裏至少有三個返回,這告訴我你的數據行後面有空行*,因此清除行緩衝區並按照CashCow下面描述的方式硬性終止它。 – WhozCraig

回答

5

getline未能上寫你的目標line我們假定你是不會改變的是在該字符串,但它正在消隱字符串,該字符串在內部用空字符替換字符0。

其餘的是未定義的行爲,因爲您正在讀取邏輯字符串末尾的字符。

要解決此問題,請將您的代碼更改爲;

string line; 

ifstream myfile ("hangman_word_collection.txt"); 
if (myfile.is_open()) 
{ 
    while (myfile.good()) 
    { 
     std::string temp; 
     if(getline(myfile, temp)) 
     { 
      temp.swap(line); 
      cout <<line<<endl; 
     } 
    } 
} 

請注意,這是不好的做法,硬編碼魔數79一樣如果你已經把line.size(),而不是你會看到什麼尺寸的字符串實際上是,和就不會有不確定的行爲。如果您擔心性能,可以將其存儲在循環外的變量中,儘管機會不大。

+0

+1這完全是問題。不知道那個while循環是甚麼;也許未來的願望是多行單詞列表。很好的捕獲。 – WhozCraig

+0

它的工作感謝 –

+0

我不知道它爲什麼在那裏。我只是應用了可以工作的最小修補程序,即讀取文件中最後一個有效行。 – CashCow

相關問題