Ошибка "cannot convert 'struct1 *' to 'struct1 *' (передача указателя на массив структур в функцию) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Уважаемые специалисты, помогите, пожалуйста, исправить ошибку. Код следующий:
Листинг программы
  1. #include "stdio.h"
  2. #include "conio.h"
  3. #define sz 4
  4. #define szsn 200
  5. #define szfn 100
  6. #define szpn 100
  7. #define f 15
  8. struct fulln {char sn[szsn]; char fir[szfn]; char pn[szpn]; };
  9. struct date {int num; int mon; int year; };
  10. struct stud {struct fulln fio; struct date ent; struct date exc; };
  11. void printstr(struct stud *p, int n, int x, int y);
  12. void main()
  13. {
  14. clrscr();
  15. struct stud list[sz]=
  16. { {{"Petrov", "Petr", "Ivanovich"}, {25,12,1980}, {0,0,0}},
  17. {{"Sidorov", "Ivan", "Nikolaevich"}, {1,1,2000}, {12,1,2001}},
  18. {{"Chukhyrmukhyrr", "Georgiy", "Alexandrovich"}, {1,9,2010}, {1,7,2014}} };
  19. struct stud *C;
  20. C=&list[0];
  21. printstr(C, 3, 2, 17);
  22. getch();
  23. }
  24. void printstr(struct stud *p, int n, int x, int y)
  25. {
  26. int i, j;
  27. for(i=0; i<n; i++)
  28. {
  29. gotoxy(x,y+i);
  30. cprintf("%s", (p+i)->fio.sn);
  31. gotoxy(x+f+1,y+i);
  32. cprintf("%s", (p+i)->fio.fir);
  33. gotoxy(x+f*2+1,y+i);
  34. cprintf("%s", (p+i)->fio.pn);
  35. }
  36. }
Борланд ругается на строку № 28
Листинг программы
  1. printstr(C, 3, 2, 17);
Сообщение об ошибке: "cannot convert ' stud *' to ' stud *' Все что нашла об этой ошибке:
Cannot convert тип_1 to тип_2 Сообщение об ошибке этапа компиляции (невозможно преобразовать тип_1 в тип_2) Присваивание, инициализация или выражение требует выполнение заданного преобразования типа, но данное преобразование недопустимо.
т.е. переменной типа struct stud* присваивается значение типа struct stud*, но они же вроде одинаковые... Не судите строго, я только учусь...

Решение задачи: «Ошибка "cannot convert 'struct1 *' to 'struct1 *' (передача указателя на массив структур в функцию)»

textual
Листинг программы
  1. #include "stdio.h"
  2. #include "conio.h"
  3.  
  4. #define sz 4
  5. #define szsn 200
  6. #define szfn 100
  7. #define szpn 100
  8. #define f 15
  9.  
  10. struct fulln  {char sn[szsn]; char fir[szfn]; char pn[szpn]; };
  11. struct date {int num; int mon; int year; };
  12. struct stud {struct fulln fio; struct date ent; struct date exc; };
  13.  
  14. void printstr(struct stud *p, int n, int x, int y);
  15.  
  16. void main()
  17. {
  18.  clrscr();
  19.  struct stud list[sz]=
  20.  {
  21.      {{"Petrov", "Petr", "Ivanovich"}, {25,12,1980}, {0,0,0}},
  22.      {{"Sidorov", "Ivan", "Nikolaevich"}, {1,1,2000}, {12,1,2001}},
  23.      {{"Chukhyrmukhyrr", "Georgiy", "Alexandrovich"}, {1,9,2010}, {1,7,2014}}
  24.  };
  25.  
  26.  struct stud *C;
  27.  C=&list[0];
  28.  
  29.  printstr(C, 3, 2, 17);
  30.  
  31. getch();
  32. }
  33.  
  34. void printstr(struct stud *p, int n, int x, int y)
  35. {
  36.     int i, j;
  37.     for(i=0; i<n; i++)
  38.     {
  39.          gotoxy(x,y+i);
  40.          cprintf("%s", (p+i)->fio.sn);
  41.          gotoxy(x+f+1,y+i);
  42.          cprintf("%s", (p+i)->fio.fir);
  43.          gotoxy(x+f*2+1,y+i);
  44.          cprintf("%s", (p+i)->fio.pn);
  45.     }
  46. }

Объяснение кода листинга программы

  1. Включаются заголовочные файлы stdio.h и conio.h.
  2. Определяются константы:
    • sz (4);
    • szsn (200);
    • szfn (100);
    • szpn (100);
    • f (15).
  3. Определяется структура fulln с полями:
    • char sn[szsn];
    • char fir[szfn];
    • char pn[szpn].
  4. Определяется структура date с полями:
    • int num;
    • int mon;
    • int year.
  5. Определяется структура stud с полями:
    • struct fulln fio;
    • struct date ent;
    • struct date exc.
  6. Определяется функция printstr.
  7. В функции main() создается массив структур stud list размером sz (в данном случае 4).
  8. Инициализируются первые три элемента массива.
  9. Создается указатель C на первый элемент массива list.
  10. Вызывается функция printstr(), передавая в нее указатель C, размер массива (3), координаты вывода (2,17) и значения переменных n, x, y, которые используются в функции printstr().
  11. В функции printstr() используется цикл for для перебора элементов массива p, начиная с индекса 0 и до n-1.
  12. Внутри цикла выводятся значения полей структур fulln на экран с помощью функции cprintf().
  13. Координаты вывода задаются с помощью функции gotoxy().
  14. Значения переменных x, y используются для задания координат вывода.
  15. Значение переменной f используется для задания смещения между полями структур fulln.
  16. Значение переменной i используется для задания номера текущего элемента массива.
  17. В конце функции main() вызывается функция getch().

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


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

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы