Не присваивается значение элементам структуры типа 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;
Вы уже выделили память под строку в структуре, вам нельзя пытаться перезаписать имеющийся указатель. Скопируйте необходимую строку, в поле в структуре.
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)
C-строки (массивы char
), будучи массивами, не присваиваются в С/С++.
Используйте функции наподобие strcpy
:
strcpy(books[booksAmount].name,name);
strcpy(books[booksAmount].title,title);
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Какими из операторов можно проверить присутствие флага, и удалить его если он есть, в противном случае добавить?
Есть проект, на C++ с OpenGL - просто камера, которой можно управлять с помощью клавиатурыНо когда включена русская раскладка, то камера не перемещается,...
Есть вот такая вот программа которая входящие данные забивает в бинарное дерево, а потом считает количество обращений к элементамНужно после...
Есть в котором встречаются <i> и </i>Заменить каждое вхождение <i> на <курсив>, а каждое вхождение </i> на <конец курсив>