2015-03-13 3 views
0

Я пытаюсь проверить строки в файле с фактическим содержимым в них и выйти в случаях, когда в строке есть две пустые строки. Это можно сделать? Этот код приводит к тому, что fgetc() не перехватывает двойные возвращения каретки/новые строки.Можно ли тестировать два новых строковых символа подряд?

Код - это фрагмент проекта C89, поэтому объявления сделаны выше фрагмента.

if ((file = fopen(fileName,"r")) == NULL) 
{ 
    free(fileName); 
    exit(1); 
} 

while (c != EOF) 
{ 
    cOld = c; 
    c = fgetc(file); 

    /* count lines */ 
    if(c == '\n'){ 
     newLine++; 
    } 

    /* test for two carriage returns in a row */ 
    if(c == '\n' && cOld == '\n'){ 
     printf("ERROR: Invalid File\n"); 
     free(fileName); 
     exit(1); 
    } 

} 
+1

Используя отладчик поможет вам решить этот вид простых проблем. –

+0

Удобный инструмент для проверки того, содержит ли ваш файл «\ r \ n» или что-то еще, [HexDump] (http://www.fileformat.info/tool/hexdump.htm) – moffeltje

+0

Обратите внимание, что в шестнадцатеричном ASCII, \ n '== 0A и' \ r '== 0D – moffeltje

ответ

2

Кажется, что ваша программа работает на окнах. В окнах конец строки представлен «\ r \ n».

Поэтому, когда вы проверяете c и cOld, они не будут удерживать '\ n' одновременно.

Текстовые файлы, созданные на компьютерах DOS/Windows, имеют разные строки , чем файлы, созданные на Unix/Linux. DOS использует возврат каретки и строку feed ("\ r \ n") в качестве строки, заканчивающейся, в которой Unix использует только фид строки ("\ n"). Вам нужно быть осторожным при передаче файлов между компьютерами Windows и машинами Unix, чтобы убедиться, что окончание строк переведено правильно.

Пожалуйста, перейдите по этой ссылке для получения более подробной информации: http://www.cs.toronto.edu/~krueger/csc209h/tut/line-endings.html

+0

Я использую Linux. – user2470057

+0

... но файл, который я тестировал, был написан в окнах ... так что да, я думаю, это проблема. На этом я проведу тестирование. Это было сложно, потому что все, что я читал, говорит, что все ОС могут обрабатывать '\ n' как новую строку. – user2470057

+0

Это решение сработало. Мне не нужно было следить за любыми ссылками, я просто изменил файл, чтобы иметь окончание строк в Unix. Все сложилось хорошо. Благодарю. – user2470057

Смежные вопросы