Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Записать в массив сперва все элементы, целая часть которых лежит в интервале [ a , b ], а затем - все прочие http://www.cyberforum.ru/cpp-beginners/thread1680904.html
Превратить одномерный массив , состоящий из n вещественных элементов таким образом , чтобы сначала располагались все элементы , целая часть которых лежит в интервале , а затем - все остальные.
C++ Найти номер первой из строк, не содержащих ни одного положительного элемента Данная квадратная матрица . Найти номер первого из строк , не содержащих ни одного положительного элемента. http://www.cyberforum.ru/cpp-beginners/thread1680898.html
Найти количество счастливых билетов с шестизначными номерами C++
Построить алгоритм для нахождения количества счастливых билетов с шестизначными номерами. Билет считается счастливым , если сумма первых трех цифр равна сумме трех последних.
C++ Зависает Visual Studio 2015 при отладке
Всем привет. Собственно вся проблема в названии темы. При попытке запустить написанный код, студия наглухо зависает. Думал что проблема в коде, хотя компилятор не ругался, попробовал запустить...
C++ Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? http://www.cyberforum.ru/cpp-beginners/thread1680875.html
Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? И почему такая вот запись является "чуть" ошибочной? int **p = new int*; for (int i(0); i<N; i++) p =...
C++ Упорядочить массив по среднему баллу вот прога уже собственно готова но как упорядочить по среднему балу? #include <iostream> #include <conio.h> #include <string.h> #include <stdio.h> using namespace std; int const n=5; struct... подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3943 / 2167 / 553
Регистрация: 18.10.2014
Сообщений: 3,783
09.03.2016, 21:46
Цитата Сообщение от Евгений_студент Посмотреть сообщение
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]);
  ...
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru