2016-02-29 4 views
-1

У меня есть текстовый файл, который мне нужно прочитать и сохранить в struct. Это выглядит примерно так:C обнаружить пустую строку

Firstname Lastname 
123 
345 
678 

Firstname2 Lastname2 
432 
454 

Количество данных, которое приходит после того, как номер части, неизвестно может быть одна или две строки или так далее. Всегда есть место, когда начинается новый человек и его данные. Как я могу определить, когда есть пустая строка, поэтому я могу перейти к следующему местоположению в моем массиве struct, где я храню данные. При использовании fgets()

buffer[0] == '\n' 

работал на окнах, но он не работает на Linux.

+4

Вы можете разместить свой код? В настоящее время неясно понять ваш вопрос. Кроме того, не просто сбрасывайте код здесь. Отправьте MCVE. –

+4

«Это не работает» не является описанием ошибки. Что именно произошло? Чего вы ожидали? – fuz

ответ

2

Предполагаете, вы используете fgets. В документации указано:

Функция fgets() должна считывать байты из потока в массив, на который указывает s, до тех пор, пока не будут прочитаны n-1 байты или не будет прочитана новая строка.

Это означает, что «новые индикаторы» передаются в буфер. Эти «индикаторы новой строки» могут быть "\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 
} 
+3

Если файл открыт как текстовый файл, эта проверка недействительна. – fuz

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 */ } 
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 
} 
Смежные вопросы