Здравствуйте. Составил программку по заданию препода. Хотел, что бы выводились русскими буквами. Вот код программы
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=0; i<n; i++)
{
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=0; i<n; i++)
{ 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=0; i<n; i++)
{
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=0; i<n; i++)//начал цикл
{
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=0; i<n; i++)
{ 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;
}
функция возвращает (если при заполнении фамилии были введены кириллицей ) абракадабру. Если заполнялась тел.книга фамилиями на латинице, то выводит нормально. Никак не могу сообразить где ошибся. Заранее всем благодарен.