Форум программистов, компьютерный форум CyberForum.ru

Подскажите, что не так в коде - C++

Восстановить пароль Регистрация
 
Евгений_студент
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 14
09.03.2016, 20:06     Подскажите, что не так в коде #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void sortofalpfavit(WORKER* st, int n) 
{
int i,j;
 
for (i = 0; i < n; i++) 
{
        for ( j = i + 1; j < n; j++)  // ñîðòèðîâêГ*
        { 
            if(strcmp(st[i].name, st[j].name) > 0) 
            {   
                WORKER temp;
                 
                strcpy(temp.name, st[i].name);
                temp.surname = st[i].surname;
                
                temp.position = st[i].position; 
                temp.supply = st[i].supply;  
 
                 
                strcpy(st[i].name, st[j].name); 
                st[i].surname = st[j].surname;
                
                st[i].position = st[j].position; 
                st[i].supply = st[j].supply; 
 
                st[j].name = temp.name; 
                strcpy(st[j].surname, temp.surname); 
                
                st[j].position = temp.position; 
                st[j].supply = temp.supply; 
            }
 
            } 
        }
    }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2016, 20:06     Подскажите, что не так в коде
Посмотрите здесь:

C++ Не понимаю,что не так в коде
C++ что в коде не так?
что в коде не так? C++
ЧТо не так в коде? C++
Что не так в коде? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2782 / 1428 / 393
Регистрация: 18.10.2014
Сообщений: 2,620
09.03.2016, 20:10     Подскажите, что не так в коде #2
Во-первых, с чего вы взяли, что тут что-то "не так"?

Во-вторых, не видя хотя бы объявлений использованных вам типов, ничего осмысленного об этом вырванном из контекста обрывке кода сказать нельзя.
sab1ch
BrainOverflow
 Аватар для sab1ch
123 / 127 / 41
Регистрация: 31.03.2013
Сообщений: 556
09.03.2016, 20:14     Подскажите, что не так в коде #3
Пока что единственное, что не так - это отсутствие тегов.
Евгений_студент
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 14
09.03.2016, 20:18  [ТС]     Подскажите, что не так в коде #4
[Error] invalid array assignment
skipaq
67 / 67 / 30
Регистрация: 24.01.2013
Сообщений: 192
09.03.2016, 20:37     Подскажите, что не так в коде #5
размер массива?
Евгений_студент
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 14
09.03.2016, 20:44  [ТС]     Подскажите, что не так в коде #6
это структура.
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2782 / 1428 / 393
Регистрация: 18.10.2014
Сообщений: 2,620
09.03.2016, 21:24     Подскажите, что не так в коде #7
Цитата Сообщение от Евгений_студент Посмотреть сообщение
[Error] invalid array assignment
Еще раз: не видя определений ваших типов, сказать ничего нельзя.

(Включив ясновидение и телепатию: я подозреваю, что у вас и 'name', и 'surname' (и может еще что), объявлены как массивы. При этом вы с 'name' работаете правильно - через 'strcmp' и 'strcpy', а 'surname' по какой-то необъяснимой причине пытаетесь присваивать напрямую. Это что за мешанина? Голые массивы в С++ (или С) не присваиваются напрямую. Нет такой фичи в С++.

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

Цитата Сообщение от Евгений_студент Посмотреть сообщение
это структура.
От "это структура" нам ни тепло, ни холодно. Полное определение типа 'WORKER' - в студию! От начала до конца.

P.S. В языке С++ нет "структур". Есть только классы.
Евгений_студент
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 14
09.03.2016, 21:31  [ТС]     Подскажите, что не так в коде #8
TheCalligrapher, вот вся программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "stdlib.h"
#include "cstring"
#include <iostream>
 
using namespace std;
 
struct WORKER {
 
    char name[30];
    char surname[50];
    char position[10];
    int supply[5];
 
};
 
void input(WORKER* st, int n) {
    printf("\t\tSome information about workers!\n");
    for (int i=0; i < n; i++) {
        cout << "Name: "; cin >> st[i].name;
        cout << "Surname: "; cin >> st[i].surname;      
        cout << "Position: "; cin >> st[i].position;           
        //cout << "Year of supply: "; cin>> st[i].supply;
    cout << "Year of supply: ";
        for (int j = 0; j < 1; j++) 
            cin >> st[i].supply[j];
    cout<<endl;     
    }
}
 
void output(const WORKER* st, int n) {
 
    system("cls");
    cout << "---------------------------------" << endl;
    for (int i = 0; i < n; i++) {
        cout << "Worker " << i+1 << endl;
        cout << "Name: " << st[i].name << endl;
        cout << "Surname: " << st[i].surname << endl;
        cout << "Position: " << st[i].position << endl;
        cout << "Year of supply: "<< st[i].supply[0]<<endl;
        cout << "---------------------------------" << endl << endl;
    }
    
}
 
void stage(const WORKER* st, int n) 
{
int j,i,k;
int flag=0;
cout<<"Input stage of work: "; cin>>k; cout<<endl;
 for ( i = 0; i < n; i++) {
 
 for ( j=0; j<1; j++)
 {
            if( k <2016 - st[i].supply[j]) // Г±Г°Г*ГўГ*ГЁГўГ*ГҐГ¬ Г±ГІГ*Г¦ 
            { 
                cout << st[i].name << "   "<< st[i].surname << "   "  << st[i].position << "   " << st[i].supply[j] << endl; 
                flag++; // åñëè ГҐГ±ГІГј âûïîëГ*ГҐГ*ГЁГҐ óñëîâèÿ óâåëè÷èâГ*ГҐГ¬ Г±Г·ВёГІГ·ГЁГЄ
            } 
}
}
            if(flag == 0)  // åñëè Г±Г·ВёГІГ·ГЁГЄ Г°Г*ГўГҐГ* 0
                printf("\nThere aren't such workers! \n"); // ГІГ*ГЄГЁГµ Г°Г*áîòГ*èêîâ Г*ГҐГІ
            
 
}
    
 
void sortofalpfavit(WORKER* st, int n) 
{
int i,j;
 
for (i = 0; i < n-1; i++) 
{
        for ( j = i + 1; j < n; j++)  // ñîðòèðîâêГ*
        { 
            if(strcmp(st[i].name, st[j].name) > 0) 
            {   
                WORKER temp;
                 
                strcpy(temp.name, st[i].name);
                temp.surname = st[i].surname;
                
                temp.position = st[i].position; 
                temp.supply = st[i].supply;  
 
                 
                strcpy(st[i].name, st[j].name); 
                st[i].surname = st[j].surname;
                
                st[i].position = st[j].position; 
                st[i].supply = st[j].supply; 
 
                st[j].name = temp.name; 
                strcpy(st[j].surname, temp.surname); 
                
                st[j].position = temp.position; 
                st[j].supply = temp.supply; 
            }
 
            } 
        }
    }
       /* 
    for (int i = 0; i < n;i++)
        for (int j = i + 1; j < n - 1; j++)
            if (st[i].name[0] > st[j].name[0])
                swap(st[i].name[0], st[j].name[0]);
        }
*/
int main() {
    begin:
    int n;
    printf("Enter amount of workers: "); 
    cin >> n;
    if (n<=0)  {
    cout<<"Error!"<<endl;
    goto begin; }
    else
    {
    
    WORKER *st = new WORKER[n];
 
    input(st, n);
    sortofalpfavit(st, n);
    output(st, n);
    stage(st, n);
 
    delete[] st;
   }
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2016, 21:46     Подскажите, что не так в коде
Еще ссылки по теме:

C++ Что не так в коде?
C++ Что в коде ни так? while не работает так, как ожидаю
Что не так в коде? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2782 / 1428 / 393
Регистрация: 18.10.2014
Сообщений: 2,620
09.03.2016, 21:46     Подскажите, что не так в коде #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Евгений_студент Посмотреть сообщение
C++
1
2
3
4
5
6
struct WORKER {
    char name[30];
    char surname[50];
    char position[10];
    int supply[5];
};
Ну то есть все именно так, как я говорил выше.

Голые массивы в С++ нельзя присваивать. Для того, чтобы скопировать один массив в другой, придется пользоваться библиотечной функцией: 'memspy, 'std::copy' и т.д. или, для C-style строк, 'strcpy'.

В вашем случае вы, очевидно, работаете со строками в стиле С. Т.е. вам надо использовать 'strcpy' для копирования таких строк. Причем вы уже использовали 'strcpy' для копирования 'name'. Так почему же вы тогда не используете 'strcpy' для всех остальных полей??? 'strcpy' в руки - и вперед!

А 'supply' у вас не строка. Его придется копировать через 'memcpy' или 'std::copy'.

---

Возникает вопрос: почему в С++ коде вы используете голые массивы, а не 'std::string' и 'std::vector'? Там бы такой проблемы не было.

---

В любом случае, на самом деле в вашем алгоритме сортировки вам очевидно нужно просто обменять местами два элемента массива. Мне не понятно, почему вы пытаетесь делать это через обмен местами индивидуальных полей, если можно было просто обменять элементы целиком, без работы с отдельными полями и безо всяких 'strcpy' вообще

C++
1
2
3
4
5
6
7
8
9
10
11
void sortofalpfavit(WORKER* st, int n) 
{
  ...
            if (strcmp(st[i].name, st[j].name) > 0) 
            {   
                WORKER temp = st[i];
                st[i] = st[j];
                st[j] = temp;
            }
  ...
}
и все!

Не говоря уже том, что можно было просто сделать

C++
1
2
3
4
5
6
7
void sortofalpfavit(WORKER* st, int n) 
{
  ...
            if (strcmp(st[i].name, st[j].name) > 0) 
              std::swap(st[i], st[j]);
  ...
}
Yandex
Объявления
09.03.2016, 21:46     Подскажите, что не так в коде
Ответ Создать тему
Опции темы

Текущее время: 17:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru