2014-03-14 43 views
0

我想每次增加变量int行getline在输入文件中遇到'\ n'字符。然而,我的变量没有增加一个新行后,我假设也许我没有正确检查缓冲区,我正在加载行的字符。这里是我的,而且大部分都是代码简化为:如何检查' n'字符使用getline()c字符串

int lines = 0; 
while(input.getline(buffer, 100)) 
{ 

if(buffer[0] == '\n') 
    lines++; 
} 

文件格式(我想这递增一旦遇到“\ n”数据的两条线之间):

20012 CSCI 109 04 90 1 25 

-- ID days_constraint start_contraint 

谢谢你们。

+3

由于'getline'根据定义可以得到线条,为什么你认为你需要检查任何东西?如果'getline'成功了,它就有了一条线。 –

+0

如果getline返回成功,然后一个新行被读取,你只需要增加计数器 –

+0

我认为你需要澄清,“返回成功”,你的意思是'failbit'没有设置正确? – DaoWen

回答

0
if(buffer[0] == '\n') 

这只有在换行符是行中的第一个字符时才起作用,即如果它是空行。所以你只是计算空行。它应该是:

if(buffer[strlen(buffer)] == '\n') 

但是@DavidSchwartz指出,你根本不需要它。

0

假设您使用了std::basic_istream::getline,因为'\ n'被用作分隔符,所以您不需要检查缓冲区中的'\ n'。所以只需增加每个成功的getline即可。

int lines = 0; 
while(input.getline(buffer, 100)) 
{ 
    lines++; 
} 
//other handle exception logic 
if (input.fail() 
{ 
// lines number is not valid 
} 
if (input.bad()) 
{ 
//...... 
} 

假定文件有效,行少于100,或者你应该添加异常处理逻辑。

+0

如果您的行长度超过100个字符,这将不起作用。我想你还需要检查'failbit'。 – DaoWen

+0

@DaoWen,感谢您的评论,是的,如果行数超过100,应该检查failbit。其他例外情况如此。 –