2011-09-04 90 views
0

我試圖做一些文件讀/寫的東西,我無法運行我的第二個getline命令。任何想法爲什麼發生這種情況?getline函數奇怪的錯誤

char str[80]; 
char substr[10]; 
file.open("abc.txt", fstream::in); 

    file.getline(str,'\n'); 
     while(!file.eof()) 
    { 
     i=0; 
     while(str[i]!='\n') {substr[i] = str[i++]; } 

     substr[i++]='\n'; 
     cout<<substr; 

     file.getline(str,'\n'); 

    } 

的abc.txt

AND 1 2 3 
NAND 4 5 6 
NOR 2 3 7 
XOR 1 6 8 
OR 8 7 9 

我用記事本++創建的txt文件,所以敢肯定有每行

+0

你能打印abc.txt的內容嗎?如果只有一行,它將不會運行循環 –

+0

['雖然!eof'幾乎總是錯的。](http://www.parashift.com/c++-faq-lite/input-output.html #faq-15.5)在這種情況下,你實際上並沒有濫用它,但我仍然不推薦這樣做。另外,'std :: string'有什麼問題? –

+0

「無法運行」是什麼意思? _怎麼了? –

回答

-1

結束CR/LF與我的評論跟進,請嘗試在while循環中移動file.getline命令:

... 
while(!file.eof()) 
{ 
    file.getline(str,80,'\n'); 
    ... 
+0

我把它帶入..沒有改變。 – noob

+1

@noob我可能會誤會,但我認爲getline在分隔符之前需要一個長度參數... –

+0

@noob也在您的命令中,您有超過10個字符的字符串(如nand行)。您可能想要增加substr的長度 –

1

fstream::getline的第二個參數i是流的大小,而不是分隔符。對於分隔版本,您需要重載版本。請參閱this reference

-1

This Works。在while條件中使用getline()並獲取由'\ n'定界的字符串並使用strcpy。

char str[80] = { '\0' }; 
char substr[80] = { '\0' }; 

ifstream file; 
file.open("abc.txt", fstream::in); 


int i = 0; 
while(file.getline(str, 79, '\n')) 
{ 
    strncpy(substr, str, 78);  
    substr[strlen(substr)]='\n';  
    cout<<substr;  
} 
+0

這有什麼問題? – Jagannath

+0

我認爲這裏的所有答案只是得到一個downvote – LeleDumbo