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

  1. Переменная f объявлена как int *. Это значит, что f - это указатель на целое число.
  2. Функция vvod() не возвращает значение, поэтому ее тип возврата - void.
  3. Внутри функции объявлены две переменные - h и i. В первом фрагменте они объявлены как char, во втором - как int.
  4. Код в функции не представлен, поэтому о том, что происходит внутри, мы можем только догадываться. Исходя из названия функции 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-й символ в строке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы