Ошибка активно e0137 выражение должно быть допустимым для изменения левосторонним значением

Понятия не имею что ему не нравиться, но указывает на эту ошибку в 5-ой строке.

 void poz_perv_i_posl_par_0(int* x, int n)
 {
    int i;
    for (i = 0; i < n; i++)
        if (x[i] = 0 && x[i+1] = 0)
        {
            printf("Порядковый номер первого элемента первой парыn i=% ", i);
            break;
        }
    for (i = n; i = 0; i--)
        if (x[i] = 0 && x[i + 1] = 0)
        {
            printf("Порядковый номер первого элемента последней парыn i=% ", i);
            break;
        }
}

Mikhailo's user avatar

Mikhailo

12.3k2 золотых знака17 серебряных знаков41 бронзовый знак

задан 6 дек 2020 в 10:34

Nightfur's user avatar

1

Приоритеты операторов приводят к тому, что ваше

if (x[i] = 0 && x[i+1] = 0) 

рассматривается как

if (x[i] = (0 && x[i+1]) = 0) 

т.е. вы, получается, хотите присвоить значение 0 выражению

0 && x[i+1]

Т.е. сделать что-то вроде

5+3 = 2

присвоить 2 сумме 5+3 :)

А вообще, просто типичная ошибка — перепутать оператор присваивания = и сравнения на равенство ==. Явно хотели написать

if (x[i] == 0 && x[i+1] == 0)

ответ дан 6 дек 2020 в 10:40

Harry's user avatar

HarryHarry

215k15 золотых знаков117 серебряных знаков228 бронзовых знаков

kukhtikov

2 / 2 / 0

Регистрация: 16.12.2012

Сообщений: 97

1

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

09.03.2013, 19:19. Показов 141147. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

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
class ts_ch
{
    int zn;
public:
    ts_ch()
    {
        zn=0;
    }
    ts_ch(int a)
    {
        zn=a;
    }
    int proverka(int a)
    {
        zn=a;
        if (zn % 2 = 0)
        {
            std::cout << "Число четное";
            return 1;
        }
        else
        {
            std::cout << "Число не четное";
            return 0;
        }
    }
    void print()
    {
        std::cout << "Значение числа: " << zn << ". Проверка: " << proverka(zn);
    }
};

Условие задачи:

Кликните здесь для просмотра всего текста

Создать класс «целое число».
Элементы класса:
поле задает значение целого числа (статус доступа private);
конструктор для инициализации поля;
метод, возвращающий 1, если число четное, и 0, в противном случае.
Создать 1 объект данного класса, проверить четное ли число, вывести соответствующее сообщение.

В строке if (zn % 2 = 0) компилятор указывает на zn и пишет: Выражение должно быть допустимым для изменения левосторонним значением.
В чем у меня ошибка?



0



Черный ворон

137 / 131 / 57

Регистрация: 31.01.2012

Сообщений: 435

09.03.2013, 19:21

2

C++
1
if (zn % 2 == 0)



4



2 / 2 / 0

Регистрация: 16.12.2012

Сообщений: 97

09.03.2013, 19:48

 [ТС]

3

Черный ворон, спасибо) Тупая ошибка..



0



Kruti

0 / 0 / 0

Регистрация: 30.12.2019

Сообщений: 1

30.12.2019, 12:32

4

Добрый день у мене такая проблема:
E0137 выражение должно быть допустимым для изменения левосторонним значением TreeC++

C:UsersAdminsourcereposTreeC++TreeC++Main.cpp

вот код

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
#include <iostream>
#include <vector>
using namespace std;
 
struct node
{
int key[1];
node* l, * r;
int day, month, year;
};
node p;
struct Porushena
{
int day, month, year;
};
Porushena pr;
void Enter()
{
cout << "Enter day:";
cin >> pr.day;
cout << "Enter month:";
cin >> pr.month;
cout << "Enter year:";
cin >> pr.year;
p.day = pr.day;
 
p.month = pr.month;
p.year = pr.year;
}
void Add(int a[4], node** t[5])
{
if ((*t) == NULL)
{
(*t[1]) = new node;
(*t[2])->l = (*t[2])->r;
(*t[2])->key = a[1];
(*t[3])->l = (*t[3])->r;
(*t[3])->day = a[2];
(*t[4])->l = (*t[4])->r;
(*t[4])->month = a[3];
(*t[5])->l = (*t[5])->r;
(*t[5])->day = a[4];
}
}
int main()
{
Enter();
system("pause");
return 0;
}

подскажите почему оно указывает на 36 строчку «(*t[2])->key = a[1];» ?



0



zayats80888

5898 / 3300 / 1353

Регистрация: 07.02.2019

Сообщений: 8,329

30.12.2019, 12:35

5

Цитата
Сообщение от Kruti
Посмотреть сообщение

(*t[2])->key = a[1];

C++
1
(*t[2])->key[0] = a[1];



0



1642 / 1091 / 487

Регистрация: 17.07.2012

Сообщений: 5,345

30.12.2019, 12:50

6

Kruti,
1) Официальные языки форума русский и английский. По правилам форума общаться можно только на этих языках.
2) Не надо вручную перед каждой строкой писать ее номер, достаточно выделить код, нажать на кнопку «C++» в редакторе сообщений и нумерация сама появится. + будет подсветка синтаксиса. Такой код читать намного проще. Не надо кидать код без тегов(когда нажимаете на кнопку, код автоматически обернется в теги [CPP]ваш код[/CPP]).
3) Для решения своей проблемы лучше создавать новую тему, а не писать в теме 6-летней давности.
Я понимаю, что на форуме вы первый день, но в следующий раз рекомендую действовать по правилам.



0



Вездепух

Эксперт CЭксперт С++

10982 / 5965 / 1630

Регистрация: 18.10.2014

Сообщений: 14,962

30.12.2019, 12:53

7

Цитата
Сообщение от Kruti
Посмотреть сообщение

подскажите почему оно указывает на 36 строчку «(*t[2])->key = a[1];» ?

Потому что (*t[2])->key — это массив. Массивы не разрешается присваивать.



0



0 / 0 / 0

Регистрация: 01.12.2020

Сообщений: 1

01.12.2020, 22:39

8

У меня такая же проблема

Вот код:

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
srand(time(NULL));
setlocale(LC_ALL, «RUSSIAN»);
int n = 0;
int first_massiv[21];
int a[6][6];
cout << » 1) Рандомные числаn 2) Ручной ввод с клавиатуры n что хочешь: «;
cin >> n; // ЗДЕСЬ ПРОВЕРКА
switch (n)
{
case 1:
for (int i = 0; i < 21; i++)
{
a[i] = -10 + rand() % 21;
}
break;
case 2:
for (int i = 0; i < 11 && i > -11; i++)
{
cout << «Вводи число «;
cin >> n; // ЗДЕСЬ ПРОВЕРКА
first_massiv[i] = n;
}
break;
}

cout << endl;
for (int i = 0; i < 21; i++)
{
cout << first_massiv[i] << » «;
}
cout << endl;
cout << endl;

for (int i = 0, q = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
if (i == j || i > j)
{
a[i][j] = first_massiv[q];
q++;
}
else a[i][j] = 0;
}
}

for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
if (a[i][j] < 10) cout << a[i][j] << » «;
else cout << a[i][j] << » «;
}
cout << endl;
}

return 0;
}

Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21?



0



41 / 26 / 17

Регистрация: 11.11.2019

Сообщений: 92

01.12.2020, 22:58

9

Цитата
Сообщение от Xeronchik
Посмотреть сообщение

Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21?

Взгляните на массив a, какой он у вас при объявлении, а затем на массив a в цикле. Вы наверное хотели использовать массив first_massiv, но не заметили.



0



Вездепух

Эксперт CЭксперт С++

10982 / 5965 / 1630

Регистрация: 18.10.2014

Сообщений: 14,962

01.12.2020, 22:58

10

Цитата
Сообщение от Xeronchik
Посмотреть сообщение

Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21?

Почему код не оформлен тегами?

Что такое a[i] и почему вы пытаетесь что-то присваивать в a[i]?



0



Выбивает ошибку: Выражение должно быть допустимым для изменения левосторонним значением
в buffer_table.company = table[i].company; Вот весь код:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <locale.h>
#include <Windows.h>

struct OfficePackagesTable
{
char name[11], company[11];
int quality, score;
};

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");

short min; // Индекс минимального элемента
const short rows = 4;
OfficePackagesTable table[rows]; // Создаём объект на основе структуры OfficePackagesTable, даём ему название 
OfficePackagesTable buffer_table; // Буферный объект для дальнейшей сортировки

// Ввод данных
for (int i = 0; i < rows-1; i++)
{
    printf("%d. Введите -> Название | Компания | Количество | Цена n", i + 1);
    scanf("%s", table[i].name);
    if (!strcmp(table[i].name, "***")) break;
    scanf("%s", table[i].company);
    scanf("%d", &table[i].quality);
    scanf("%d", &table[i].score);
}

printf("|-----------------------------------------------------------------| n");
printf("|                          Офисные пакеты                         | n");
printf("|-----------------------------------------------------------------| n");
printf("|    Название    |    Компания    |    Количество    |    Цена    | n");
printf("|----------------|----------------|------------------|------------| n");
// Выводим фактические данные
for (int i = 0; i < rows-1; i++) {
    printf("|   %10s   |   %10s   |  %10d      |%10d  | n", table[i].name, table[i].company, table[i].quality, table[i].score);
}
printf("|-----------------------------------------------------------------| n");

// Сортировка массива
for (int i = 0; i < rows - 2; i++) {
    // Указываем, минимальный элемент является первым
    min = i;
    for (int j = i + 1; j < rows - 1; j++) {
        // Если текущий элемент меньше минимального, он становится минимальным
        if (strcmp(table[min].name, table[j].name) > 0) min = j; // strcmp сравнивает строки
        // Перестановка первого и минимального элемента
        if (min > i)
        {
            strcpy(buffer_table.name, table[i].name);
            buffer_table.company = table[i].company;
        }
    }
}
}

Попробовал различные варианты, предлагаемые в интернете — никак не идёт.

Здравствуйте.
Нужно создать программу, в которой будет создаваться односвязный линейный список студентов. И нужно сделать возможность изменения имени заданного студента.
При компиляции, выходят ошибки:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка (активно) E0137 выражение должно быть допустимым для изменения левосторонним значением Student Work C:UsersJohnsourcereposStudent WorkStudent Workmain.c 87
Ошибка (активно) E1072 объявлению не может быть назначена метка Student Work C:UsersJohnsourcereposStudent WorkStudent Workmain.c 111
Ошибка C2106 =: левый операнд должен быть левосторонним значением Student Work C:UsersJohnsourcereposStudent WorkStudent Workmain.c 87

Как можно исправить эти ошибки?
И дополнительно, посоветуйте, как я могу улучшить мой код? Может, что-то можно написать проще, лучше или эффективнее?
Код main.c:

#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX 3
#define KOL 15

struct Student
{
    int id;
    char Name[KOL];
    int Age;
    float AverageRaiting;
    struct Student* nextStudent;
};

void InitStudentList(struct Student** student)
{
    *student = (struct Student*)
        malloc(sizeof(struct Student));
    (*student)->id = 1;
    printf("Введіть ім’я 1-го студента: ");
    scanf("%s", (*student)->Name);
    printf("Введіть вік 1-го студента: ");
    scanf("%d", &(*student)->Age);
    printf("Введіть середній рейтинг 1-го студента: ");
    scanf("%f", &(*student)->AverageRaiting);
    printf("n");
    (*student)->nextStudent = NULL;
    struct Student* endStudent = *student;
    for (int i = 2; i <= MAX; i++)
    {
        endStudent->nextStudent =
            (struct Student*) malloc(sizeof(struct Student));
        endStudent = endStudent->nextStudent;
        endStudent->id = i;
        printf("Введіть ім’я %d-го студента: ", i);
        scanf("%s", endStudent->Name);
        printf("Введіть вік %d-го студента: ", i);
        scanf("%d", &endStudent->Age);
        printf("Введіть середній рейтинг %d-го студента: ", i);
        scanf("%f", &endStudent->AverageRaiting);
        printf("n");
        endStudent->nextStudent = NULL;
    }
}

void PrintList(struct Student* student)
{
    struct Student* printStudent = student;
    printf("==========================n");
    printf("Номер         Ім’я         Вік  Рейтинг n");
    printf("==========================n");
    while (printStudent)
    {
        printf("%d", printStudent->id);
        printf("%-15s", printStudent->Name);
        printf("%4d", printStudent->Age);
        printf("%8.2f", printStudent->AverageRaiting);
        printf("n");
        printStudent = printStudent->nextStudent;
    }
    printf("==========================n");
}

void FreeList(struct Student** student)
{
    if (*student == NULL)
        return;
    struct Student* tmp = *student;
    struct Student* curr_stud;
    while (tmp)
    {
        curr_stud = tmp;
        tmp = tmp->nextStudent;
        free(curr_stud);
    }
    *student = NULL;
}

void ChangeStudentName(int n, char name[KOL], struct Student* student)
{
    struct Student* changingStudent = student;
    while (changingStudent)
    {
        if (changingStudent->id == n)
        {
            changingStudent->Name = name;
            printf("зміни записані");
            break;
        }
    }
}

int main(void)
{
    int command;
    struct Student* BaseStudent = NULL;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    InitStudentList(&BaseStudent);
    for (;;)
    {
        printf("Введіть команду:n 1 - Виведення списку студентів,n 2 - Змінити прізвище зазначеного студента,n 3 - вихідn");
        scanf("%d", &command);
        switch (command)
        {
        case 1:
            PrintList(BaseStudent);
            break;
        case 2:
            int n;
            char name[KOL];
            printf("Введіть номер студента: ");
            scanf("%d", &n);
            printf("Введіть нове ім'я студента: ");
            scanf("%s", &name);
                ChangeStudentName(n, name, BaseStudent);
            break;
        case 3:
            FreeList(&BaseStudent);
            return 0;
            break;
        default:
            printf("Помилка вводу...");
            FreeList(&BaseStudent);
            return 0;
            break;
        }
    }
    return 0;
}

Заранее благодарен!

Im writing a small change to a code in visual studio and Im getting this error:

Error (active) E0137 expression must be a modifiable L-value
C:Users...events.cpp 75

This is the piece of code I added: (In bold is the line I’m getting the error):

void EV_HLDM_MuzzleFlash(vec3_t pos, float amount)
{
    dlight_t *dl = gEngfuncs.pEfxAPI->CL_AllocDlight(0);
    dl->origin = pos;  // ERROR HERE
    dl->color.r = 255; // red
    dl->color.g = 255; // green
    dl->color.b = 128; // blue
    dl->radius = amount * 100;
    dl->die = gEngfuncs.GetClientTime() + 0.01;
}

And here is the definition of dlight:

typedef float vec3_t[3]; 

typedef struct dlight_s
{
    vec3_t  origin;
    float   radius;
    color24 color;
    float   die;                // stop lighting after this time
    float   decay;              // drop this each second
    float   minlight;           // don't add when contributing less
    int     key;
    qboolean    dark;           // subtracts light instead of adding
} dlight_t;

I don’t really understand what´s wrong. I’m defining origin as a vector for the struct dlight and then I’m giving a vector in EV_HLDM_MuzzleFlash. I don’t understand what the problem is. Please help.

I tried changing the first line in dlight_t to Vector and the previous error dissapear, but I got new errors:

Error C3646 'origin': unknown override specifier 
Error C4430 Missing type specifier; int is assumed Note: C++ does not support default-int 

I get 46 times those 2 errors when changing from vec3_t to Vector.

What am I missing?

  • Ошибка активно e0070 недопустимый неполный тип
  • Ошибка активно e0020 идентификатор pcontext не определен
  • Ошибка активированы динамики телевизора филипс пишет
  • Ошибка активированы динамики телевизора philips
  • Ошибка активация этого приложения невозможна при отключенном контроле учетных записей