Ошибка "левый операнд должен быть левосторонним значением" - C (СИ)
Формулировка задачи:
Задание заключалось в том, чтобы переделать структуру под стек, но в функции vvod в 40 строке "p->marka = m;" выдает ошибку "левый операнд должен быть левосторонним значением". Не могу понять, в чем ошибка
#include <stdio.h> #include <string.h> #include <stdlib.h> struct autoservis { int num; char marka[50]; int probeg; struct autoservis *next; }; typedef struct autoservis St; St *last = NULL; int i, k, n, pr; char m[50]; void vvod() { St *p; p = new St; printf("Vvedite kol-vo avtomobilej: "); scanf_s("%d", &k); if (p != 0) { for (i = 0; i < k; i++) { puts("Vvedite registrazionniy nomer: "); scanf_s("%d", &n); p->num = n; puts("Vvedite marku: "); fflush(stdin); gets_s(m); p->marka = m; printf("Vvedite probeg: "); scanf_s("%d", &pr); p->probeg = pr; p->next = last; last = p; } } else printf("Oshibka pri vidilenii pamjati\n"); } void poisk() { St *psk = last; int nomer; if (psk == NULL){ printf("Net avtomobilej\n"); } else { printf("Vvedite reg. nomer: \n"); scanf_s("%d", &nomer); while (psk != NULL) if (psk->num == nomer) { printf("Registrazionniy nomer: %d \n", psk->num); printf("Marka: %s \n", psk->marka); printf("Probeg: %d \n", psk->probeg); } else psk = psk->next; } } void udalenie() { St *po; po = new St; po = last; last = last->next; free(po); printf("Udalenije vipolneno\n"); } void vivod() { St *o = last; if (o == NULL) printf("Stek pust\n"); else { printf("Stek: \n"); while (o != NULL) { printf("Reg. nomer: %d, Marka: %s, Probeg: %d\n", o->num, o->marka, o->probeg); o = o->next; } printf("\n"); } } int check() { return (last == NULL); } int menu() { int ch; printf("\n Menu: \n"); printf("1. Vvod massiva structur \n"); printf("2. Poisk v massive structyr po zadannomy parametry \n"); printf("3. Ydalenie structuri iz massiva \n"); printf("4. Vivod structuri \n"); printf("5. Vikhod\n"); printf("\t Vash vibor: "); scanf_s("%d", &ch); return ch; } int main() { while (1) { switch (menu()) { case 1: vvod(); break; case 2: poisk(); break; case 3: if (!(check())){ udalenie(); break; } else{ printf("Stek pust\n"); break; } case 4: vivod(); break; case 5: return 0; default: printf("\n"); break; } } }
Решение задачи: «Ошибка "левый операнд должен быть левосторонним значением"»
textual
Листинг программы
strcpy(p->marka , m);
Объяснение кода листинга программы
В данном коде происходит копирование строки из одного места в другое.
- Переменная
p
содержит указатель на структуру. - Переменная
marka
является полем структуры, в которое будет скопирована строка. - Переменная
m
содержит строку, которую необходимо скопировать. Выполняется функцияstrcpy
, которая принимает два аргумента: - Указатель на строку, из которой необходимо скопировать символы.
- Указатель на строку, в которую необходимо скопировать символы.
Функция
strcpy
работает следующим образом: - Пока не встретится ноль символа в строке, с которой мы работаем (m), копируем каждый символ в строку, на которую мы работаем (marka).
- После встречи с нулевым символом, прекращаем копирование.
Ошибка
левый операнд должен быть левосторонним значением
говорит о том, что в данной строке встречается некорректная операция с указателем и/или строкой. В данном случае, возможно, что указательp
не указывает на начало структуры или поле структурыmarka
не является строкой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д