Не присваивается значение char

210
20 июня 2018, 21:20

Не присваивается значение элементам структуры типа char

#include <iostream>
using namespace std;
struct book
{
    int udk;
    char name[32];
    char title[32]; 
    int year;
    int exemp;
};

book* AddStruct(book* Obj, const int amount);
void setData(book* Obj, const int amount);
void showData(const book* Obj, const int amount);
int main()
{
    setlocale(LC_ALL, "rus");
    book* books = 0;
    int booksAmount = 0;
    int code;
    do
    {
        books = AddStruct(books, booksAmount);
        cin >> books[booksAmount].udk;
        code = books[booksAmount].udk;
        if (code == 0){ break; };
        cin >> books[booksAmount].name >> books[booksAmount].title >> books[booksAmount].year >> books[booksAmount].exemp;
        booksAmount++;
        code = books[booksAmount-1].udk;
            } while (code!= 0);
            int code2;
            int udk, change, year;
            char name[32];
            char title[32];
            showData(books, booksAmount);
            do{
                cin >> code2;
                if (code2 == 0){ break; };
                cin >> udk >> name >> title >> year >> change;
                while(code2!=0){
                    int ir = 0;
                    do{
                        if (books[ir].year == year)break; else ir++;
                    } while (ir<booksAmount);

                        if (code2 == 2){
                            books[ir].exemp = books[ir].exemp - change; 
                        }
                        if (code2 == 1){
                            if (books[ir].year != year)
                                {
                                    books = AddStruct(books, booksAmount);
                                    books[booksAmount].udk = udk;
                                    books[booksAmount].name=name;
                                    books[booksAmount].title=title;
                                    books[booksAmount].year = year;
                                    books[booksAmount].exemp=change;
                                    booksAmount++;
                            } while (code != 0); break;
                            books[ir].exemp = books[ir].exemp + change;
                            break;
                        }
                    break;
                }
                } while (code<1000); 
                for (int i = booksAmount - 1; i >= 0; i--)
                {
                    for (int j = 0; j < i; j++)
                    {
                        if (books[j].year > books[j + 1].year)
                        {
                            book tmp = books[j];
                            books[j] = books[j + 1];
                            books[j + 1] = tmp;
                        }
                    }
                }

    showData(books, booksAmount);
    cout << booksAmount << endl;
        cout<<books[booksAmount].name;
    system("pause");
    delete[] books;
    return 0;
}

book* AddStruct(book* Obj, const int amount)
{
    if (amount == 0)
    {
        Obj = new book[amount + 1];
    }
    else
    {
        book* tempObj = new book[amount + 1];
        for (int i = 0; i < amount; i++)
        {
            tempObj[i] = Obj[i];
        }
        delete[] Obj;
        Obj = tempObj;
    }
    return Obj;
}

void showData(const book* Obj, const int amount)
{
    system("cls");
    for (int i = 0; i < amount; i++)
    {
        if (Obj[i].exemp > 0){ cout << Obj[i].udk << " " << Obj[i].name << " " << Obj[i].title << " " << Obj[i].year << " " << Obj[i].exemp << endl; }
    }
}

Вот здесь выдает ошибку "левый операнд должен быть левосторонним значением"

books[booksAmount].name=name;
books[booksAmount].title=title;
Answer 1

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

strcpy_s(books[booksAmount].name, name); // e.g. strcpy(books[booksAmount].name, name)
strcpy_s(books[booksAmount].title, title); // e.g. strcpy(books[booksAmount].title, title)
Answer 2

C-строки (массивы char), будучи массивами, не присваиваются в С/С++.

Используйте функции наподобие strcpy:

strcpy(books[booksAmount].name,name);
strcpy(books[booksAmount].title,title);
READ ALSO
Удалить / добавить значение из флагов

Удалить / добавить значение из флагов

Какими из операторов можно проверить присутствие флага, и удалить его если он есть, в противном случае добавить?

172
OpenGL и клавиатура

OpenGL и клавиатура

Есть проект, на C++ с OpenGL - просто камера, которой можно управлять с помощью клавиатурыНо когда включена русская раскладка, то камера не перемещается,...

253
Сортировка бинарного дерева

Сортировка бинарного дерева

Есть вот такая вот программа которая входящие данные забивает в бинарное дерево, а потом считает количество обращений к элементамНужно после...

233
Замена подстроки в строке с++

Замена подстроки в строке с++

Есть в котором встречаются <i> и </i>Заменить каждое вхождение <i> на <курсив>, а каждое вхождение </i> на <конец курсив>

178