2011-09-04 70 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