Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кривое отображение кириллических символов 
:(
    Опции темы
Sofia
Дата 18.10.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Написала программу, которая считывает символы из текстового файла, т.е. мы берем номер элемента по ASCII, записываем его в переменную типа int. Потом, при печати, мы печатаем значение этой переменной, но уже как char.  

Если смотреть программу в отладчике, то мы видем, что массив содержит верные данные. 

На печати выводится часть кириллических символов, но выводится неверно. Еще часть заменяется странными значками (псевдографика?). 
Есть версия, что эта проблема возникла из-за того, что в компилляторе не проставлено восприятие по умолчанию char как char unsigned. Где это делается, я не нашла, компиллятор Visual. 
Приведение переменной типа int, содержащей код ASCII, при печати к типа char unsigned результата не далиsmile
 Чего делать?

PM MAIL WWW ICQ   Вверх
Dov
Дата 18.10.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Sofia, ты русские символы читаешь из файла?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Sofia
Дата 18.10.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Из массива структур. В структуре есть переменная типа int. МОгу повесить код, если так будет легче
PM MAIL WWW ICQ   Вверх
Dov
Дата 18.10.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Давай код

Добавлено @ 23:28 
И пройдись  поиском по форуму.
ключевые слова: 
русский текст в консоли, вывод кириллицы, отображение русских символов и т.д и т.п.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Sofia
Дата 18.10.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



По поиску походила сразу..
Понимаешь, в чем тема, преподаватель утверждает, что ничего приписывать не надо,никаких функций. Что это либо в настройках неправильно, ибо русские символы как раз после 128 символа идут, аэто обязательно char unsigned,.. либо он тогда не знает... 
Код:
Код

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

    struct SYMBOL
    {
        int a;//номер символа по ASCII
        int b;//встречаемость
        float c;//процент
    };

void sort(SYMBOL arr[],int m)
{
    int i=0;
    SYMBOL buf;
    SYMBOL *max;
    int k=0;
    for(int j=0;j<m;j++)
    {
        for(i=j,max=&arr[j];i<m-1;i++)
        {
            if(arr[i+1].b>(*max).b)
            {
                buf=arr[j];        
                arr[j]=arr[i+1];
                arr[i+1]=buf;
            }
        }
        //m--;
    }
    for(int k=0;k<m;k++)
            printf("\t%c\t%d\t%d\t\t%2.6f%\t\n",(unsigned char)arr[k].a,arr[k].a,(int)arr[k].b,arr[k].c);
}

int main()
{
    FILE *fp;
    fp=fopen("C:\\moon.txt","rb");
    if(!fp)
    {
        puts("Error!");
        exit(1);
    }
    int symbol[256]={0};//тут мы будем считать, сколько раз какой символ встретился
    int count=0;//сколько всего символов в файле
    int count_ch=0;//сколько вариантов символов
    int z;

    while(feof(fp)==NULL)//заполняем массив symbol
    {
        z=(fgetc(fp));
        symbol[(int)z]++;
        count++;
    }

    int i,j,k=0;
    SYMBOL mass[256]={0,0};

    for(i=0;i<256;i++)
    {
        if(symbol[i]!=0)
        {
            count_ch++;
            mass[k].a=i;
            mass[k].b=symbol[i];
            k++;
        }
    }
    for(i=0;i<count_ch;i++)
        mass[i].c=(((float)mass[i].b)/(float)count*100);


    printf("\tSymbol\tCharacter frequency\tPercent\t\n");

    sort(mass,count_ch);

    fclose(fp);

    getch();
    return 0;
}

PM MAIL WWW ICQ   Вверх
dumb
Дата 19.10.2006, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Sofia, правильно тебе в поиск указали - проблема кодировок. CharToOem, OemToChar тебе в помощь. и, кстати, проверку сделай после чтения символа - if (z == -1) break; иначе попортишь стек.
PM MAIL   Вверх
Dov
Дата 19.10.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Sofia, a windows у тебя какой?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1694 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.