Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2012, 22:25   #1
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию Вывод кирилицы

Здравствуйте. Составил программку по заданию препода. Хотел, что бы выводились русскими буквами. Вот код программы
PHP код:
#include<iostream>
#include<cstring>
using namespace std;
/*функция compare для сортировки*/
int compare(const void *arg1, const void *arg2)
    {
        return 
strcmp((char*)arg1,(char*)arg2);
    }
//***********ОПИСАНИЕ СТРУКТУРЫ****************************************
//*************ТЕЛЕФОННАЯ КНИГА****************************************
struct Telefon //назвали структуру
{
    
char fam[20];//массив под фамилию
    
char imja[10];//массив под имя
    
int tel;
    
int god[3];//массив для даты
};
void OutTitle(const Telefon &);//функция для вывода данных

//***********ЗАПОЛНЕНИЕ КНИГИ******************************************
//*********************************************************************
int main()

{    
setlocale (LC_ALL"Russian");//кирилица
    //создаем динамический массив
    
int n;
    
Telefon*a;
    
cout<<" Введите предполагаемое кол-во абонентов:\n";
    
cout<<" Кол-во будет=";cin>>n;
    
cout<<endl;
    
//выделение памяти под массив
    
a=new Telefon[n];
    
/*заполнение массива в количестве заданном выше*/
    
for (int i=0i<ni++)
    {
        
cout<<" Фамилия:  ";cin>>a[i].fam;
        
cout<<" Имя:      ";cin>>a[i].imja;
        
cout<<" Номер телефона:     ";cin>>a[i].tel;
        
cout<<" Введите дату рождения:\n";//массив из трех чисел
        
cout<<" Число:    ";cin>>a[i].god[0];
        
cout<<" Месяц:    ";cin>>a[i].god[1];
        
cout<<" Год:       ";cin>>a[i].god[2];
        
cout<<endl;
    }
//*******СОРТИРОВКА ПО АЛФАВИТУ****************************************
//*********************************************************************
/*используем фунуцию qsort для сортировки по 
заданным параметрам: a,n,sizeof(Telefon),compare*/
    
cout<<" Абонент:\n";
    
qsort(a,n,sizeof(Telefon),compare);
    for (
int i=0i<ni++)
    {    
setlocale (LC_ALL"Russian");
        
cout<<" "<<a[i].fam<<" ";
        
cout<<" "<<a[i].imja<<" ";
        
cout<<" "<<a[i].tel<<" ";
        
cout<<" "<<a[i].god[0]<<".";
        
cout<<" "<<a[i].god[1]<<".";
        
cout<<" "<<a[i].god[2]<<endl;
        
cout<<endl;
    }
//**********ПОДСЧЕТ СОВПАДЕНИЙ*****************************************
//********С ОДНОЙ ДАТОЙ РОЖДЕНИЯ***************************************
    
int data;//новая переменная
    
int counter;//счетчик
    
cout<<" Совпадение по датам рождения\n"<<endl;
    
cout<<"Введите дату рождения: ";cin>>data;
    
counter=0;//начальное значение счетчика
    
for (int i=0i<ni++)
    {
        if (
a[i].god[0]==data)
            
counter++;//прибавляем если совпало
    
}
    
cout<<" Всего совпало: "<<counter<<endl;
    
cout<<endl;

//**********ПОИСК ПО ФАМИЛИИ*******************************************
//*********************************************************************
/*для разнообразия можно задать поиск по
фамилии, для включения необходимо 
раскомментировать данный блок. Вообще если 
параметров для поиско много, то можно задать их
все через switch.
    char name[20]; 
    cout<<" SEARCH:  ";
    cin>>name;
    
        for (int i=0; i<n; i++)
        {
            if(strcmp(a[i].fam,name)==0)
                OutTitle(a[i]);
        }*/
//**********ПОИСК ПО НОМЕРУ********************************************
//*********************************************************************
    
int telef;
    
cout<<" Поиск по номеру телефона:\n";
    
cout<<" Введите номер телефона:";cin>>telef;
    
bool found false;//задал новую переменную вида bool
    
for (int i=0i<ni++)//начал цикл
    
{
        if(
a[i].tel==telef)//сравниваю список
        
{
            
OutTitle(a[i]);//если есть совпадения записываю в  OutTitle 
            
found true;//переменная принимает значение "ИСТИНА"
            
break;}//возврат
        

        if (!
found)//если (НЕ ИСТИНА)
            
cout << " Нет такого! "<< endl;//вывести если нет таких  
    
}
//*************ВЫВОД НА ЭКРАН******************************************
//***********РЕЗУЛЬТАТОВ ПОИСКА****************************************
/*возврат заданной нами функции OutTitle с параметрами*/
void OutTitle(const Telefon b)
    {
        
cout<<" Результат поиска:\n"<<endl;
        
cout<<" "<<b.fam<<", "<<b.imja;
        
cout<<", "<<b.god[0]<<"."<<b.god[1];
        
cout<<"."<<b.god[2]<<", ";
        
cout<<b.tel<<'\n';
        
cout<<endl;
        
system("PAUSE");
    } 
Все выводится нормально, кроме сортировки по алфавиту.
PHP код:
cout<<" Абонент:\n";
    
qsort(a,n,sizeof(Telefon),compare);
    for (
int i=0i<ni++)
    {    
setlocale (LC_ALL"Russian");
        
cout<<" "<<a[i].fam<<" ";
        
cout<<" "<<a[i].imja<<" ";
        
cout<<" "<<a[i].tel<<" ";
        
cout<<" "<<a[i].god[0]<<".";
        
cout<<" "<<a[i].god[1]<<".";
        
cout<<" "<<a[i].god[2]<<endl;
        
cout<<endl;
    } 
функция возвращает (если при заполнении фамилии были введены кириллицей ) абракадабру. Если заполнялась тел.книга фамилиями на латинице, то выводит нормально. Никак не могу сообразить где ошибся. Заранее всем благодарен.
Oleg34 вне форума Ответить с цитированием
Старый 14.01.2012, 17:29   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

У меня тоже были проблемы с вводом кириллицы. Помогли здесь: http://programmersforum.ru/showthread.php?t=179398
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод списка символов справа налево 5 раз подряд и исключить вывод цифр Gareek Помощь студентам 2 23.12.2011 21:41
Вывод из БД Bustle PHP 5 11.04.2011 23:08
Windows XP чтение кирилицы @@@KpecT@@@ Помощь студентам 0 02.03.2011 18:45
Проблемы с отображением кирилицы в Memo VHomer Компоненты Delphi 12 07.12.2010 20:18
Windows 7 некорректное отображение кирилицы Stilet Windows 6 07.05.2009 13:31