Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Файлы, кодировки
 
 автор: hell_riser   (22.12.2008 в 17:31)   письмо автору
1.8 Кб
 
 

Всем здравствуйте .Сразу же прошу прощения за название темы.
В общем есть простая задачка, написать программу на Си с использованием опций командной строки
для подсчёта кол-ва символов, слов, строк в заданом текстовом файле.

Проблема в том, что программа некорректно работает текстовыми файлами сохранёнными в кодировке cp 1251. В ср 866 всё работае нормально. Программа консольная.

Исходник в аттаче.

  Ответить  
 
 автор: exp   (22.12.2008 в 19:38)   письмо автору
 
   для: 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");
ничего не меняется с файлами?

  Ответить  
 
 автор: hell_riser   (23.12.2008 в 22:39)   письмо автору
 
   для: exp   (22.12.2008 в 19:38)
 

не помогает :(

  Ответить  
 
 автор: bronenos   (24.12.2008 в 00:45)   письмо автору
 
   для: hell_riser   (23.12.2008 в 22:39)
 

Свойства окна консоли -> Шрифт -> Поставить второй из списка?

  Ответить  
 
 автор: hell_riser   (24.12.2008 в 10:44)   письмо автору
 
   для: bronenos   (24.12.2008 в 00:45)
 

Прошу прощения, что сразу не так высказал суть проблемы.
Не корректность работы проявляется в том, что к примеру в файле сохранённом в ср1251 состоящем из 100 строк оказывается всего 10 строк. Прерывается подсчёт прямо по середине строки, при этом завершение работы программы происходит нормально, без каких-либо ошибок.

  Ответить  
 
 автор: exp   (24.12.2008 в 13:04)   письмо автору
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нца файла.
//прикрепил тот-же самый файл, только немного мной испорченый :)

  Ответить  
 
 автор: hell_riser   (24.12.2008 в 14:25)   письмо автору
 
   для: exp   (24.12.2008 в 13:04)
 

Вот! Спасибо работает.
Теперь я над вашим кодом по извращаюсь ;), ибо мне strchr() надо однозначно т.к. по условию параметры могут быть заданы как -w -l -с, так и -wcl.

  Ответить  
 
 автор: hell_riser   (08.01.2009 в 01:46)   письмо автору
3 Кб
 
   для: hell_riser   (24.12.2008 в 14:25)
 

Помогите разобраться, что-то всё равно не верно считает символы и последнюю строку не хочет считать :(
Прикрепляю последний вариант (по идее окончательный) пожалуйста помогите найди ошибку.

з.ы. Пробывал выводить посимвольно на экран в конце каждой строки приписывается какой-то не понятный кракозябр.

  Ответить  
 
 автор: AndreyCh   (16.01.2009 в 22:01)   письмо автору
 
   для: hell_riser   (08.01.2009 в 01:46)
 

Этот кракозябр {\10 \13} он же конец строки из двух байт,
из-за них ты теряешь по 2 байта от каждой строки при цикле - исключи из обработки

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования