我有一个文本文件,我需要阅读并存储在struct中。它看起来像这样:
Firstname Lastname
123
345
678
Firstname2 Lastname2
432
454
数字部分未知之后的数据量可能有一行或两行左右。当新人及其数据开始时总是有空间。如何检测何时出现空行,以便我可以移动到存储数据的struct数组中的下一个位置。 使用fgets()
时buffer[0] == '\n'
在Windows上工作,但它在linux上不起作用。
答案 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
}