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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массивы структур, сортировка 
V
    Опции темы
Slyfox
Дата 12.12.2007, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот пока до чего дошел
Код
#include <conio.h>
#include <iostream>
#include <fstream>
#include "windows.h"
using namespace std;

char strTemp[240];
char* Rus(char* strUk)
{
    CharToOem(strUk,strTemp);
    return strTemp;
}

struct ZARPL{
    int zarplata;
    int tn;
    char fio[21]; //Фамилия
    char dolznost[21]; // Должность
}z[70],perem;

ramka();

main()
{
    int kol,i;
    cout << Rus("Введите количество работников, которые будут введены в таблицу ");
    cin >> kol;
    for (i=0;i<kol;i++){
        cout << "\n";
        cout << Rus("Введите данные о работнике №") << (i+1) << '\n';
        cout << Rus("Зарплата ");
        cin >> z[i].zarplata;
        cout << Rus("Табельный номер(т/н) ");
        cin >> z[i].tn;
        cout << Rus("ФИО ");
        cin.get();
        cin.get(z[i].fio,21);
        cout << Rus("Должность ");
        cin.get();
        cin.get(z[i].dolznost,21);
    }

    cout <<  Rus("\n----Введенные данные----------\n");
    ramka();
    for(i=0;i<kol;i++)
        cout << z[i].zarplata << '\t' << z[i].tn << '\t' << z[i].fio << '\t' << z[i].dolznost << endl;
    ramka();

    cout <<  Rus("\n----Отсортированные данные----\n");
    ramka();

    int a,b;
    for (a=1;a<kol;a++)
        for (b=kol-1;b>=a;b--){
            if (z[b-1].zarplata > z[b].zarplata){
                perem.zarplata = z[b-1].zarplata;
                z[b-1].zarplata = z[b].zarplata;
                z[b].zarplata = perem.zarplata;

                perem.tn = z[b-1].tn;
                z[b-1].tn = z[b].tn;
                z[b].tn = perem.tn;

                /*perem.fio = z[b-1].fio;
                z[b-1].fio = z[b].fio;
                z[b].fio = perem.fio;

                perem.dolznost = z[b-1].dolznost;
                z[b-1].dolznost = z[b].dolznost;
                z[b].dolznost = perem.dolznost;*/
            }
        }
    for(i=0;i<kol;i++)
        cout << z[i].zarplata << '\t' << z[i].tn << '\t' << z[i].fio << '\t' << z[i].dolznost << endl;

    ramka();

    

    getch();
    return 0;
}


Код
/*perem.fio = z[b-1].fio;
z[b-1].fio = z[b].fio;
z[b].fio = perem.fio;
perem.dolznost = z[b-1].dolznost;
z[b-1].dolznost = z[b].dolznost;
z[b].dolznost = perem.dolznost;*/

Если убрать знаки комментария, то появляются ошибки. Самое интересное, что сортирует массив чисел, но не хочет символы

Выдает ошибки:
Код
--------------------Configuration: sotrudnik - Win32 Debug--------------------
Compiling...
sotrudnik.cpp
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(64) : error C2106: '=' : left operand must be l-value
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(65) : error C2106: '=' : left operand must be l-value
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(66) : error C2106: '=' : left operand must be l-value
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(68) : error C2106: '=' : left operand must be l-value
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(69) : error C2106: '=' : left operand must be l-value
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(70) : error C2106: '=' : left operand must be l-value
c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(96) : warning C4508: 'ramka' : function should return a value; 'void' return type assumed
Error executing cl.exe.

sotrudnik.exe - 6 error(s), 1 warning(s)

Вроде ошибок нету. Но вроде и есть. Как мне выполнить сортировку подскажите.
Заранее спасибо. Может тут сортировка должна быть по другому, помогите исправить. Пожалуйста

Это сообщение отредактировал(а) Slyfox - 12.12.2007, 03:27
PM MAIL   Вверх
DjoNIK
Дата 12.12.2007, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Цитата(Slyfox @  12.12.2007,  03:23 Найти цитируемый пост)
Самое интересное, что сортирует массив чисел, но не хочет символы

Ну так правильно, что он не делает сортировку - fio и dolznost у тебя char-овские массивы, а ты хочешь выполнить операцию копирования для них через '='.
Код

strcpy(char* dst, const char* src);

тебе в помощь


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Slyfox
Дата 12.12.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо помогло.
Я так понял подобные функции этой лечат от всех недугов.
PM MAIL   Вверх
baldina
Дата 12.12.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Массивы символов (они  же - строки С) лечат.
Но коли пишешь на С++, имеет смысл использовать класс string из стандарной библиотеки. Он позволяет и присваивание делать, и имеет удобный оператор + для конкатенации и много чего еще. К тому же всегда есть возможность из класса получить указатель на строку С, если понадобится.

Смотри, как мог бы выглядеть фрагмент твоего кода:

Код

#include <string>
using std::string;

string Rus(const std::string& strUk)
{
    string strRus (strUk.size(), 0);
    CharToOem (strUk.c_str(), &strRus.at(0));
    return strRus;
}

struct ZARPL{
    int zarplata;
    int tn;
    string fio; //Фамилия
    string dolznost; // Должность
}z[70],perem;


Остальное - без изменений, и то что в комментариях заработает.



PM MAIL   Вверх
Slyfox
Дата 12.12.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я так и не понял почему после этого то, что в комментариях, должно заработать. При этом если не прибегнуть к strcpy.
Объясните. Мне кажется, что я не правильно понял выше изложенную идею.

Добавлено через 2 минуты и 9 секунд
Все понял - тип другой - string.
Спасибо, учту на будущее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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