|
 1.8 Кб |
|
| Всем здравствуйте .Сразу же прошу прощения за название темы.
В общем есть простая задачка, написать программу на Си с использованием опций командной строки
для подсчёта кол-ва символов, слов, строк в заданом текстовом файле.
Проблема в том, что программа некорректно работает текстовыми файлами сохранёнными в кодировке cp 1251. В ср 866 всё работае нормально. Программа консольная.
Исходник в аттаче. | |
|
|
|
|
|
|
|
для: hell_riser
(22.12.2008 в 17:31)
| | А если немного изменить в начале main() printf("%s\n\n", setlocale(LC_ALL, "Russian"));
// system("cls");
printf("%s\n\n", setlocale(LC_ALL, "Russian.1251"));
// system("cls"); | ничего не меняется с файлами? | |
|
|
|
|
|
|
|
для: exp
(22.12.2008 в 19:38)
| | не помогает :( | |
|
|
|
|
|
|
|
для: hell_riser
(23.12.2008 в 22:39)
| | Свойства окна консоли -> Шрифт -> Поставить второй из списка? | |
|
|
|
|
|
|
|
для: bronenos
(24.12.2008 в 00:45)
| | Прошу прощения, что сразу не так высказал суть проблемы.
Не корректность работы проявляется в том, что к примеру в файле сохранённом в ср1251 состоящем из 100 строк оказывается всего 10 строк. Прерывается подсчёт прямо по середине строки, при этом завершение работы программы происходит нормально, без каких-либо ошибок. | |
|
|
|
|
 2.2 Кб |
|
|
для: hell_riser
(24.12.2008 в 10:44)
| | я попробовал c помощью fgetc() извлекать символы и оставить только stdio.h
только там похоже в функциях надо использовать что-то вроде while(!feof(in)){
ch = fgetc(in); |
потомучто как пишут
Однакo, значение EOF этo также дoпустимoе
целoе значение, пoэтoму функция feof или ferror дoлжна
испoльзoваться, чтoбы oтличить oшибку oт кoнца файла.
//прикрепил тот-же самый файл, только немного мной испорченый :) | |
|
|
|
|
|
|
|
для: exp
(24.12.2008 в 13:04)
| | Вот! Спасибо работает.
Теперь я над вашим кодом по извращаюсь ;), ибо мне strchr() надо однозначно т.к. по условию параметры могут быть заданы как -w -l -с, так и -wcl. | |
|
|
|
|
 3 Кб |
|
|
для: hell_riser
(24.12.2008 в 14:25)
| | Помогите разобраться, что-то всё равно не верно считает символы и последнюю строку не хочет считать :(
Прикрепляю последний вариант (по идее окончательный) пожалуйста помогите найди ошибку.
з.ы. Пробывал выводить посимвольно на экран в конце каждой строки приписывается какой-то не понятный кракозябр. | |
|
|
|
|
|
|
|
для: hell_riser
(08.01.2009 в 01:46)
| | Этот кракозябр {\10 \13} он же конец строки из двух байт,
из-за них ты теряешь по 2 байта от каждой строки при цикле - исключи из обработки | |
|
|
|