簡體   English   中英

cout空的時候有兩個getline?

[英]Cout empty when there are two getline?

我正在嘗試計算我的數組,但每當我嘗試時它總是顯示為空。

int array_size = 0;
int pos;
string line;

ifstream inFile;
string filename = 'test.txt';
inFile.open(filename);

for(array_size = 0; getline(inFile, line); array_length++);

string * array_holder = new string[array_size];

while(getline(inFile, line))
{
    array_holder[pos++] = line;
}

printArray(array_holder, array_size);

打印數組

void printArray(string * data, int x)
{
    for(int z = 0; z < x; z++)
        cout << data[z] << endl;
}

當我注釋掉這一行時:

for(array_size = 0; getline(inFile, line); array_length++);

printArray 將顯示里面的所有內容。

但是當我取消注釋該行時,它只顯示空行(取決於數組大小)。

我認為這是由於雙重getline? 我需要清除 getline 緩沖區還是什么? 除了 cin,我找不到有關 getline 緩沖區的任何詳細信息。 還是這是 memory 問題?

請注意,在我的情況下我不能使用向量,我需要讀取文本文件中的總行數,以便將數組大小解析為我的數組語法。

謝謝。

for(array_size = 0; getline(inFile, line); array_length++);

此循環一次讀取inFile ,直到到達文件末尾。

此循環終止后,整個文件已被讀取。 畢竟,這正是您的程序告訴您的計算機要做的事情:一次讀取一行,遞增計數器,直到getline失敗,這發生在文件末尾。 但緊接着,第二個循環嘗試繼續從文件中讀取:

while(getline(inFile, line))

但是,由於已經到達文件末尾,這將立即失敗,並且沒有任何反應。

您顯然想從頭開始重新讀取文件,這里。 但是,計算機編程的黃金法則指出“您的計算機將始終完全按照您的要求執行操作,而不是您希望它執行的操作”。 您還沒有告訴您的計算機將 go 回到文件的開頭,所以沒有理由這樣做。 因此,您只需告訴您的計算機執行此操作,方法是關閉並重新打開文件,或使用seekg () 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM