Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при работе со структурами: Expression must be a modifiable lvalue  (Прочитано 12103 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nait123321
Новенький

ua
Offline Offline

« : 16-03-2016 10:15 » 

Здравтсвуйте, не могу найти ошибку в коде, суть в следующем: заполнить информацию о 5 ВУЗах(используя структуры), сохранить в бинарный файл, после чего вывести на экран, в порядке убавления по конкурсу. Вот код:
Код: (C)
#define _CRT_SECURE_NO_WARNINGS
#include <math.h>
#include <stdio.h>
#include <locale.h>
struct Vuz
{
    char name[20];
    char address[60];
    char spec[100];
    char konkurs[50];
    int oplata;
};
void quick_struct(struct Vuz *Student, int count);
void qs_struct(struct Vuz *Student, int left, int right);
void read(struct Vuz *Student, int i);
void read(struct Vuz *Student, int i)
{
    for (int j = 0; j <i; j++)
    {
        printf("Введiть назву ВУЗа\n");
            scanf("%s", &Student[j].name);
        printf("Введiть адресу\n");
            scanf("%s", &Student[j].address);
        printf("Введiть перелік спеціальностей\n");
            scanf("%s", &Student[j].spec);
        printf("Введiть конкурс\n");
            scanf("%s", &Student[j].konkurs);
        printf("Введiть оплату за навчання\n");
            scanf("%i", &Student[j].oplata);
    }
}
int main()
{
    setlocale(LC_ALL, "ukr");
    float oplatamax = 0;
    struct Vuz Student[5];
    read(Student, 5);
    FILE *file;
    FILE *file2;
    quick_struct(Student, 5);
    if ((file = fopen("info.txt ", "wb")) == NULL)
    {
        printf("Помилка при відкритті файлу");
        return 1;
    }
    int tmp, i, j;
 
    for (i = 0; i <= 4 - 1; ++i)
    {
        for (j = 0; j <= 4 - 1; ++j)
        {
            if (Student[j + 1].konkurs < Student[j].konkurs)
            {
                tmp = Student[j + 1].konkurs;
                Student[j + 1].konkurs = Student[j].konkurs;
                Student[j].konkurs = tmp;
            }
        }
    }
    for (int i = 0; i <= 4; i++)
    {
        fwrite(&Student[i], sizeof(Student), 1, file);
        printf("Назва ВУЗу: %s\nАдреса: %s\nПерелік спеціальностей: %s\nКонкурс: %s\n Оплата за навчання: %f\n", Student[i].name,
            Student[i].address, Student[i].spec, Student[i].konkurs, Student[i].oplata);
    }
    fclose(file);
    _getch();
    return 1;
}
Ошибку выдаёт в этом месте:
Код: (C)
Student[j + 1].konkurs = Student[j].konkurs;
Student[j].konkurs = tmp;
Ссылается на Student и пишет: expression must be a modifiable invue
В чём проблема?
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #1 : 16-03-2016 11:41 » 

у Вас поле konkurs char[50], а tmp - int. Имхо, tmp надо тоже сделать char[50], ну и копировать через strcpy()
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines