C检测空行

时间:2016-02-29 13:09:18

标签: c

我有一个文本文件,我需要阅读并存储在struct中。它看起来像这样:

Firstname Lastname
123
345
678

Firstname2 Lastname2
432
454

数字部分未知之后的数据量可能有一行或两行左右。当新人及其数据开始时总是有空间。如何检测何时出现空行,以便我可以移动到存储数据的struct数组中的下一个位置。 使用fgets()

buffer[0] == '\n'

在Windows上工作,但它在linux上不起作用。

3 个答案:

答案 0 :(得分:3)

在调用fgets

后尝试以下操作
buffer[strcspn( buffer, "\r\n" )] = '\0';

if ( buffer[0] == '\0' ) { /* the string is empty */ }

更可靠的方法是修剪线条中的所有前导空格。

例如

char *p = buffer;

while ( isspace( ( unsigned char )*p ) ) ++p;

if ( *p == '\0' ) { /* the string is empty */ }

答案 1 :(得分:2)

我假设您使用fgets。文档说明

  

fgets()函数必须从流中读取字节到s指向的数组,直到读取n-1个字节,或者读取换行符并将其传送到s。

这意味着,“换行指示符”也会传输到缓冲区。这些“换行符”可能是"\n""\r\n",具体取决于您正在使用的系统。

因此:同时检查"\r\n"。一种方法是使用strcmp并将其与零(即“等于”)进行比较:

//Check both end-of-line formats (DOS, Unix)
if(strcmp(buffer, "\n") == 0 || strcmp(buffer,"\r\n") == 0) {
  // Empty line read
} else {
  // Line with text read
}

答案 2 :(得分:0)

char *ptr;
ptr = readline(); //reads a line from file
while(*ptr==' ' || *ptr=='\t' || *ptr=='\n' || *ptr=='\r')
 ptr++;

if(*ptr=='\0')
   then it is empty line.
else
{
    do job
}