С Новым годом! Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 22
1

Возникла проблема с кодом

11.11.2019, 23:25. Показов 678. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Нужна помощь, чтобы понять, что не так с моим кодом. Когда-то давно я написал эту программу, она работала в MinGW Developer Studio. Сейчас появилась необходимость в этой программе снова, а так как я проги переустанавливал, сейчас стоит все новенькое, но эта программа не работает. В Visual Studio 2019 (далее VS) компилятор ругался на массив, а точнее, способ его задания. Мол, нужно было задавать массив динамическим, но из-за того, что массив динамический, нужно будет перелопатить всю программу, ибо она выдает не те результаты, что выдавала при исходном коде, неправильные. Если же в VS скомпилировать проект для языка Си, он тоже ругается, и не дает собрать программу. При этом в MinGW программа работает, а в VS отказывается. На скриншотах ошибки, которые выдает при компиляции как С++, очевидно, что код не должен работать на другом языке, но почему не компилируется при Си именно в VS?
Код ниже:
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
51
52
53
#include <stdio.h>
#include <Windows.h>
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    struct 
    {
        int number, residents;
        char surname[15], initials[39];
    } lodgers[10];
    int n,i;
    printf("\nВведите количество квартиросъемщиков дома n (n<10): ");
    scanf("%d",&n);
    int lodgersCopy[n];
    int index[n];
    printf("Введите список из %d квартиросъемщиков(а) (Номер квартиры|Фамилию квартиросъемщика|Количество жильцов в квартире|Инициалы каждого жильца:\n",n); 
    int check=0;
    for (i=0;i<n;i++)
        {fflush(stdin); scanf("%d",&lodgers[i].number);
         fflush(stdin); gets(lodgers[i].surname);
         fflush(stdin); scanf("%d",&lodgers[i].residents);
         if (lodgers[i].residents>5)
             check=1;
         fflush(stdin); gets(lodgers[i].initials);}
    printf("\nПолучившаяся таблица данных \n");
    for (i=0;i<n;i++)
      printf("\n %d %15s %4d %s", lodgers[i].number, lodgers[i].surname, lodgers[i].residents, lodgers[i].initials);
    for (i=0; i < n; i++)
    {
     lodgersCopy[i] = lodgers[i].number;
     index[i] = i;
    }
    for (int k = 0; k < n-1; k++)
     for (i = 0; i < n-1-k; i++)
    if (lodgersCopy[i] > lodgersCopy[i + 1])
    {
     lodgersCopy[i] += lodgersCopy[i + 1]; 
     lodgersCopy[i + 1] = lodgersCopy[i] - lodgersCopy[i + 1];
     lodgersCopy[i] -= lodgersCopy[i + 1];
     index[i] += index[i + 1]; 
     index[i + 1] = index[i] - index[i + 1];
     index[i] -= index[i + 1];
    }
    printf("\n\nОтсортирован по номерам квартир \n");
    for (i=0;i<n;i++)
      printf("\n %d %15s %4d %s", lodgers[index[i]].number, lodgers[index[i]].surname, lodgers[index[i]].residents, lodgers[index[i]].initials);
    if (check)
    printf("\n\nКвартиры, в которых проживает более 5-ти жильцов:\n");
    for (i=0;i<n;i++)
     if (lodgers[index[i]].residents>5)
      printf("\n %d %15s %4d %s", lodgers[index[i]].number, lodgers[index[i]].surname, lodgers[index[i]].residents, lodgers[index[i]].initials);
}
Миниатюры
Возникла проблема с кодом   Возникла проблема с кодом   Возникла проблема с кодом  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2019, 23:25
Ответы с готовыми решениями:

возникла проблема с созданием динамической библитеки.
Всем доброго времени суток. У меня возникла проблема с созданием динамической библитеки. У меня...

Возникла проблема в коде
Всем добрый вечер! У меня проблема в коде но не знаю как решить ее Объясню коротко и ясно... У...

На вашем ПК возникла проблема...
Здравствуйте. У меня случилась такая ситуация после сброса параметров компьютера ( с сохранением...

Возникла проблема с массивами
Нужно удалить из массива все строки, в которых нет цифр. static void RanomDvumerniiArray(ref int...

4
594 / 416 / 136
Регистрация: 02.10.2008
Сообщений: 1,779
Записей в блоге: 1
13.11.2019, 00:16 2
Цитата Сообщение от John404 Посмотреть сообщение
int lodgersCopy[n];
    int index[n];
Всё верно компилятор написал - при объявлении массива в Си должно быть константное выражение, т.е. выражение, которое компилятор может вычислить во время компиляции, дабы выделить место этим массивам в стеке.
0
Эксперт CЭксперт С++
5118 / 4558 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
13.11.2019, 13:16 3
John404, добавьте в начало:
C
1
#define _CRT_SECURE_NO_WARNINGS
Дабы убрать сообщения о scanf. VS настойчиво рекомендует пользоваться scanf_s
0
0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 22
14.11.2019, 20:03  [ТС] 4
Все дело в том, что программа спокойно компиллируется в MinGW, работает корректно. А VS какие-то константные выражения требует, я n (размер массива) задал так, что он спрашивается у пользователя, почему VS принципиально, чтобы он заранее был известен?
0
Эксперт CЭксперт С++
5118 / 4558 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
14.11.2019, 20:12 5
John404, ну вот так!
Если мне не изменяет память, какой-то стандарт разрешает так делать, какой - не помню.
По-умолчанию в VS для массивов разрешено использовать только заранее известный размер.
Но! Создайте динамический массив, кто мешает?
0
14.11.2019, 20:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2019, 20:12
Помогаю со студенческими работами здесь

Возникла проблема со switch
возникла проблема. есть switch(c){ case &quot;1&quot;:cout&lt;&lt;&quot;x&quot;;a=b;if(...) case...

Возникла проблема с dataGridView
Добрый день, форумчане! Возник вопрос при создании приложения Windows Forms для работы с БД MS...

Возникла проблема с gulp
При вводе слова &quot;gulp&quot; в cmd выводит следующую ошибку: PS C:\Users\aa068\Desktop\project&gt; gulp...

Возникла проблема с ComboBox
Постоянно пропадает список из ComboBox (Пробовал уже и через Items в окне дизайнера, и через код, и...

Возникла проблема с Python
Возникла проблема с написанием калькулятора не хочет запускать код, якобы все правильно написано,...

Возникла проблема с методом Paint()
При поверхностном изучении Java ничего противоречивого и сложного в методе Paint я не обнаружил,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru