LINUX.ORG.RU

интерсно


0

0

интересно, почему нижеследующий код работает в винде, но не работает в linux'е?

//------------------------------------------------------------------
#include <stdio.h>

int main()
{
char c;
FILE *f;
FILE *fp;

f = fopen("out", "w");
fp = fopen("main", "r");


while ( (c = getc(fp)) != EOF) {

if (c == '\n') {

c = getc(fp);

if (c == '\n') ;
else {
fputc ('\n', f);
fputc (c, f);
}

}
else fputc(c, f);

}




}

anonymous

Ответ на: комментарий от ival

Вот почти доделал. Заменяет N последовательностей \r\n на одну \r\n.
Одна лишь беда - если есть пустая строка в начале файла.

while ( (c = getc(fp)) != EOF) {

if (c == '\n') {

while ( c == '\r' || c == '\n')
c = getc(fp);

putc('\n',f);
putc(c, f);
}

else fputc(c, f);

}

anonymous
()
Ответ на: комментарий от anonymous

>другая же вместо того, что бы учить пользователя корректности, продолжает работать исправно

Есть хороший пример такой программы - mplayer, хорошо играющий битые файлы. но утверждение про неоправданно увеличивающуюся сложность он не отменяет.

ival ★★
()
Ответ на: комментарий от anonymous

> Одна лишь беда..

Тебе выше привели вариант кода, который будет работать, работать и работать.. Чо ты изобретаешь лисапет?

anonymous
()
Ответ на: комментарий от anonymous

ТЫ думал на меня. АААААААААААаааааааааааааааааа порвууууу

anonymous
()
Ответ на: комментарий от anonymous

>>Тебе выше привели вариант кода, который будет работать, работать и работать.. Чо ты изобретаешь лисапет?

Будь добр покажи где?

anonymous
()

Ура!!! Осилил. Полностью работает и для 'виндовых новых строк' и для *никсовых )))). Все делает в *никсовые \n Рад безумно.

int main() {

int c; int smth = 0; FILE *f;

f = fopen("out", "w");

while ( ( c = getchar()) != EOF) {

if ( c == '\r') {

if ( (c = getchar()) == '\n') { while ( c == '\n' || c == '\r') c = getchar(); if (smth == 1) putc('\n',f); if (c != EOF) putc(c, f); smth = 1;

} else putc(c,f);

} else putc(c,f);

}

fclose(f); }

anonymous
()
Ответ на: комментарий от anonymous

> Ура!!! Осилил.

Теперь убери избыточный код - переменная smth в твоём варианте не нужна, и подумай можно было бы уменьшить количество одинаковых выражений "putc(c,f);" в коде.

anonymous
()
Ответ на: комментарий от anonymous

>>Теперь убери избыточный код - переменная smth в твоём варианте не нужна, и подумай можно было бы уменьшить количество одинаковых выражений "putc(c,f);" в коде.

Верняк. Она нужна только один раз - Если файл начинается с пустой(ых) строк. Без неё нинаю как.
А вот насчёт putc - думаю ( хренова кстати думается) нет.

anonymous
()
Ответ на: комментарий от anonymous

> Она нужна только один раз - Если файл начинается с пустой(ых) строк.

Интерпретируй переменную как счетчик выведенных строк и выводи \n только когда счетчик >0

> хренова кстати думается

сутра думай :-)

anonymous
()
Ответ на: комментарий от anonymous

>> хренова кстати думается >>сутра думай :-) Спать не буду наверно. ;-)

>>Интерпретируй переменную как счетчик выведенных строк и выводи \n только когда счетчик >0 В принципе тоже самое. Ведь будет '\n' выводиться потом всегда. Но тоже логично. Оставлю как есть ;-)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.