Компилятор выдает ошибку no match for operator[] in stud[i] - C (СИ)
Формулировка задачи:
Компилятор выдает ошибку no match for operator[] in stud[i]. Что не так?
Буду благодарна, если укажете и на другие ошибки.
struct student { char surname[20]; char name[15]; int exam1; int exam2; int exam3; int exam4; } stud; void vvod(int *f) { char h; char i; printf ("Vvedite kollichestvo studentov"); scanf("%d", &h); f=(int*)malloc(h*sizeof(int)); for (i=0; i<h; i++) { printf("Vvedite dannye %d-go abiturienta\n",i++); printf("Familiya: "); scanf("%s", stud[i].surname); printf("Imya: "); scanf("%s", stud[i].name); printf("Ocenka za Matan\n"); scanf("%d", &stud[i].exam1); printf("Ocenka za AiG\n"); scanf("%d", &stud[i].exam2); printf("Ocenka za Fiziku\n"); scanf("%d", &stud[i].exam3); printf("Ocenka za Progu\n"); scanf("%d", &stud[i].exam4); } } void printrezult() { int z; for(z=0;z<h;z++) printf("%s %s %d %d %d %d\n",stud[z].surname,stud[z].name,stud[z].exam1,stud[z].exam2,stud[z].exam3,stud[z].exam4); } void sort() { int j,k; student p; for(j=0; j<h; j++) { for(k=0; k<h; k++) { if(strcmp(stud[j].surname,stud[k].surname)<0) { p=stud[j]; stud[j]=stud[k]; stud[k]=p; } } } }
Решение задачи: «Компилятор выдает ошибку no match for operator[] in stud[i]»
textual
Листинг программы
void vvod(int *f) { char h; char i; на void vvod(int *f) { int h; int i;
Объяснение кода листинга программы
В данном коде есть два фрагмента, которые отличаются только типами данных переменных h и i. В первом фрагменте они объявлены как char, во втором - как int. В остальном код идентичен:
- Переменная f объявлена как int *. Это значит, что f - это указатель на целое число.
- Функция vvod() не возвращает значение, поэтому ее тип возврата - void.
- Внутри функции объявлены две переменные - h и i. В первом фрагменте они объявлены как char, во втором - как int.
- Код в функции не представлен, поэтому о том, что происходит внутри, мы можем только догадываться.
Исходя из названия функции
vvod
, можно предположить, что она предназначена для ввода данных. Возможно, она считывает данные из стандартного ввода (stdin) и сохраняет их в переменную f. Ошибкаno match for operator[] in stud[i]
говорит о том, что компилятор не может найти подходящую операцию для обращения к элементу массива по индексу. Это может произойти, если тип данных, на который указывает указатель, не поддерживает операцию индексации. В данном случае, если h и i объявлены как char, то stud[i] будет обращаться к символу в строке, а не к целочисленному значению. Если же h и i объявлены как int, то stud[i] будет обращаться к целочисленному значению в массиве. Возможное решение проблемы - привести типы данных переменных h и i к типу данных массива stud. Если stud - это массив целых чисел, то stud[i] будет возвращать i-й элемент массива. Если stud - это массив символов, то stud[i] будет возвращать i-й символ в строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д