Как я могу определить, является ли символ * окончанием строки Windows? - PullRequest
0 голосов
/ 09 мая 2019

В моей программе на C я просматриваю файл символ за символом для информации. По некоторым причинам мои данные получают символы конца строки в Windows, хотя мой код выглядит так, как показано ниже.

Я пробовал пару вещей, таких как temp [0] == '\ r \ n'

while((temp = fgetc(file)) != EOF)
    {
    if((temp>=65 && temp<=90) || (temp>=97 && temp<=122) || (temp>=48 && temp<=57) || temp==39){
      c[count]=temp;
      count++;
    }
else
      break;

1 Ответ

5 голосов
/ 09 мая 2019

Окончания строки Windows состоят из двух отдельных символов, после которых следует символ возврата каретки ('\r'), за которым следует новая строка ('\n'). Поскольку они представляют собой комбинацию из двух символов, вы не можете обнаружить их, просматривая только один символ за раз.

Если ваш код работает в Windows, и файл должен интерпретироваться как текст, откройте его в текстовом режиме (например, "r" вместо "rb") и строку терминаторы должны автоматически переводиться на отдельные символы новой строки. Если вы работаете в системе, которая использует одиночные символы новой строки в качестве разделителей строк (в большинстве случаев это , но Windows в наши дни), то такой перевод не будет выполнен. В этом случае, чтобы обнаружить терминаторы строки в стиле Windows, вам необходимо отслеживать, был ли непосредственно предыдущий символ '\r'. Когда это так, и следующий прочитанный символ - '\n', тогда вы обнаружили терминатор строки.

Но если считается, что терминаторы в стиле Windows должны быть ошибочными в файле, вместо этого попробуйте просто исправить файл с помощью dos2unix или аналогичной утилиты.

...