A1exSun
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору akaGM он не не понравился, а не понадобился я думал что там в пробеле проблема и что я не правильно пишу, решил убедиться попросив написать код Добавлено: Код: void echof(int l, int r, unsigned char *str) { int i, j, len, w, sp; char *newstr, *out; len = strlen(str); newstr = win2oem(str); w = 80 - l - r; if (wherex() > l+1) gotoxy(l+1,wherey()+1); else gotoxy(l+1,wherey()); out = calloc(w+1,sizeof(char)); j = 0; for (i = 0; i < len; i++) { if (newstr[i] != '\r' && newstr[i] != '\n') { out[j] = newstr[i]; } j++; sp = 0; while (newstr[i+sp+1] != ' ' && newstr[i+sp+1] != '\0' && newstr[i+sp+1] != '\n') sp++; if (sp >= w) { strncpy(out,newstr,w); j = w; i += w - 1; } if (j == w || newstr[i+1] == '\0' || newstr[i+1] == '\n' || sp > w - j) { while (out[0] == ' ') for (j = 0; j < w; j++) out[j] = out[j+1]; cprintf("%s",out); if (str[i+1] != '\0') gotoxy(l+1,wherey()+1); free(out); out = calloc(w+1,sizeof(char)); j = 0; } } free(newstr); free(out); } | Не выводит строку после переноса (\r\n) по идее. Текст читается из файла. Раньше было так, все выводило: Код: void echof(int l, int r, unsigned char *str) { /* функція виводу на екран тексту cp1251 */ int i, j = 0, len, pos = 0; char *newstr = win2oem(str); /* cp1251 > cp866 */ len = 80 - (l + r); /* розраховуємо ширину екрану */ gotoxy(l+1,wherey()); /* змінюємо позицію курсору */ for (i = 0; i < (int)strlen(newstr); i++) { /* цикл виводу тексту */ if (newstr[i] == ' ') { /* якщо пробіл */ while (newstr[i+j+1] != ' ' && newstr[i+j] != '\0' && newstr[i+j] != '\n') j++; if (j >= len-pos) pos = len; /* позиція = ширина екрану */ else putch(newstr[i]); /* інакше виводимо символ */ j = 0; } else putch(newstr[i]); /* інакше виводимо символ */ if (newstr[i] == '\n') { /* якщо новий рядок */ gotoxy(l+1,wherey()); /* змінюємо позицію каретки */ pos = 0; /* позиція каретки = 0 */ } if (pos++ == len) { /* якщо позиція = ширина екрану */ gotoxy(l+1,wherey()+1); /* змінюємо позицію каретки */ pos = 0; /* позиція каретки = 0 */ } } free(newstr); /* звільняємо пам'ять */ } | Зря вчера весь вечер переделывал что ли... Добавлено: Код: if (j == w || newstr[i+1] == '\0' || newstr[i+1] == '\n' || sp > w - j) { | заменил на Код: if (j == w || newstr[i+1] == '\0' || newstr[i] == '\n' || sp > w - j) { | и стало все хорошо Но теперь должен всплыть другой баг... Какой не помню. | Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 19:42 24-05-2011 | Исправлено: A1exSun, 20:07 24-05-2011 |
|