Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Как представить в коде табличные данные? http://www.cyberforum.ru/c-beginners/thread1365059.html
Есть ли возможность записать в код эту таблицу?
C (СИ) Не получается создать в структуре поле с именем (char[]) чтобы компилировалось без warning Всем привет. Потребовала жизнь немного разобраться с С, (до этого были 1С и совсем немножко С#), и я засел ковырять некий курс. Дошел до тестовой задачи: дана структура на несколько полей, функция... http://www.cyberforum.ru/c-beginners/thread1364982.html
Тернарные операции: разменять n, используя 50,10,5,3,1- копеечные монеты, чтобы количество было минимальным C (СИ)
Здравствуйте, занимаюсь сессией и возникла проблема с одним заданием на Тернарные операции , как реализовать это с математической точки зрения я понимаю , но с программной - нет : Записать...
C (СИ) Нужен перевод из С++ в С
написал на плюсах, нужен обычный Си. помогите перевести на язык C, либо подскажите компилятор. ни разу не сталкивался с обычным Си, занимался только плюсами. сейчас требуется перевести в Си, а у меня...
C (СИ) Символьные строки. Разбивание на слова и нахождение нужного слова http://www.cyberforum.ru/c-beginners/thread1364884.html
Помогите написать прогу. Не могу разобраться, какие команды применить. Так же нужно использовать отдельно функцию. В Файле находится список поездов в виде: Пункт_отправления-Пункт назначения...
C (СИ) По доступу к элементам структуры по адресу или значению В продолжение моей прошлой темы про функцию malloc, создал новую тему, опасаясь, что туда уже никто не заглянет. Более менее разобрался с этой темой, есть такой рабочий код: #include <stdlib.h>... подробнее
zss
Модератор
Эксперт С++
7956 / 7140 / 4453
Регистрация: 18.12.2011
Сообщений: 18,858
Завершенные тесты: 1
30.01.2015, 21:18 0

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

30.01.2015, 21:18. Просмотров 729. Ответов 7
Метки (Все метки)

Ответ

Все Ваши беды от неразумного использования глобальных переменных.
В частности, в функции vvod() вводите m и n в ЛОКАЛЬНЫЕ переменные.
А в выводе почему-то используете m и n ГЛОБАЛЬНЫЕ.

Настоятельно рекомендую отказаться от ВСЕХ глобальных переменных,
а передавать значения через параметры функций.
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <malloc.h>
#include <windows.h>
 
 
 
 
 
//int *a;
//int i, j, z, n,m, min = 0, max = 0, sum1 = 0, sum2 = 0;
void vvod(int** a,int& n,int& m);
void vyvod(int*, int,int);
void zadanie1();
void zadanie2();
int menu();
 
int main()
{
    int n,m;
    int *a;
    setlocale(LC_ALL, "RUS");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
    while (1)
    {                                  //вызов функции menu
        switch (menu())         //условное выражение в операторе switch -  
        {
        case 2:
            zadanie1();
            break;
        case 4:
            zadanie2();
            break;
        case 1:
            vvod(&a,n,m);
            break;
        case 3:
            vyvod(a,n,m);
            break;
 
        case 5:
            return 0;
            //Выполнение функции завершается после выполнения оператора return
        }
 
    }
 
    _getch();
}
 
void vvod(int** a,int& n,int& m)
{
    int i, j;
        printf("Введите количество строк: ");
    scanf_s("%d", &n);
    printf("Введите количество столбцов: ");
    scanf_s("%d", &m);
    *a = (int*)malloc(n*m*sizeof(int));      // Захват памяти
    for (i = 0; i < n; i++)  // цикл по строкам
    {
        for (j = 0; j < m; j++)  // цикл по столбцам
        {
            printf("a[%d][%d] = ", i, j);
            scanf_s("%d", ((*a) + i*m + j));
        }
    }
    printf("Массив на %d элементов сгенерирован  ", n);
}
 
void vyvod(int *a, int n,int m)
{
    int i, j;
    if (!a)
        printf("Массива нет \n Сгенерируйте массив выбрав пункт 1");
    else
        for (i = 0; i<n; i++)  // цикл по строкам
        {
        for (j = 0; j<m; j++)  // цикл по столбцам
        {
            printf("%5d ", *(a + i*m + j)); // 5 знакомест под элемент массива
        }
        printf("\n");
        }
}
 
void zadanie1()
{
    float mas1[6][6];
    int num = 0, fl = 0,i,j;
    for (i = 0; i < 6; i++)
    {
        printf("\n");
        for (j = 0; j < 6; j++)
        {
            mas1[i][j] = -1 + rand() % 20;
            if (fl == 0 && mas1[i][j] < 0)
                num = i;
            printf("%4.1f  ", mas1[i][j]);
        }
    }
    printf(" \nОтрицательный элемент в строке  %d ", num + 1);
 
    printf("\nМатрица с уменьшенным вдвое столбцом %d", num + 1);
    for (i = 0; i < 6; i++)
    {
        printf("\n");
        for (j = 0; j < 6; j++)
        {
 
            if (j == num && mas1[i][j] != 0)
                mas1[i][j] = mas1[i][j] / 2;
 
            printf("%4.1f  ", mas1[i][j]);
        }
    }
 
 
 
}
void zadanie2()
{
    char s[100];
    printf("Введите строку: ");
    getchar();
    gets_s(s);
    int i = 0;
    printf("Полученная строка в нижнем регистре равна:");
    while (s[i] != '\0')
    {
        printf("%c", char(tolower(s[i])));
        i++;
    }
    i = 0;
    printf("\n");
    printf("Полученная строка в верхнем регистре равна:");
    while (s[i] != '\0')
    {
        printf("%c", char(toupper(s[i])));
        i++;
    }
 
 
}
 
int menu()  //определение функции menu
{
    int ch;
    do {
        printf("\n   Menu: \n");
        printf("1. Ввод массива  \n");
        printf("2. Задание 1  \n");
        printf("3. Вывод массива\n");
        printf("4. Задание 2\n");
        printf("5. Выход\n");
        printf("\t Ваш выбор: ");
        scanf_s("%d", &ch);
    } while (ch > 5);
    return ch;
}


Вернуться к обсуждению:
Ввод и вывод динамического массива. "Ошибка C2109: для индекса требуется массив или указатель"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2015, 21:18
Готовые ответы и решения:

Ошибка при работе с массивом - Для индекса требуется массив или указатель
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;conio.h&gt; #include&lt;time.h&gt; #include&lt;iostream&gt; int...

Списки. Ошибка "используется потенциально неинициализированная локальная переменная-указатель "t""
В 35-й выдает ошибку &quot;используется потенциально неинициализированная локальная переменная-указатель...

Ввод и вывод двумерного массива - Нет доступа при записи "0x80000000"
Построила, ошибок нет. Дальше нажимаю на отладку, ввожу первые 4 цифры, потом нажимаю Enter, чтобы...

Ошибка "error C2109: для индекса требуется массив или указатель"
Помогите, пожалуйста! Имеется программа: double f4 (double x) { double p,f; double a; int...

Найти причины и способы исправления ошибки "error C2109: для индекса требуется массив или указатель"
Добрый день! Подскажите пожалуйста, писала программу, но на протяжении всей программы для...

7
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru