Компилятор выдает ошибку 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-й символ в строке.