В функции оказывается лишь один первый элемент массива структур Book, в любом варианте кода - C (СИ)

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

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

Здравствуйте! Не могу передать указатель на массив структур. Почему-то в функции оказывается лишь один первый элемент массива структур Book, в любом моем варианте кода. Везде пишут, что, чтобы передать массив структур в функцию, достаточно лишь передать его первый элемент в функцию, но не работает:
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <tchar.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #define n 20
  7.  
  8. struct Phone
  9. {
  10. char Name[20]; //ФИО
  11. char Adress[32]; //Адрес
  12. char Number[12]; //номер телефона
  13. }T;
  14. struct Phone Book[n];
  15. ...
  16. void sort (struct Phone *Book, int *B) //пузырьковая сортировка
  17. {
  18. int i,j;
  19. for (i=0;i<n-1;i++)
  20. {
  21. for(j=n-1;j>i;j--)
  22. {
  23. ...
  24. }
  25. }
  26. }
  27. ...
  28. int main()
  29. {
  30. sort (&Book[0], B);} //вызов функции, пробовала писать просто Book, тоже идет хорошо, но в функции только первый элемент
В идеале, мне нужно передать не всю структуру, а только Book[n].Number, это вообще не получается сделать, все время ругается компилятор.

Решение задачи: «В функции оказывается лишь один первый элемент массива структур Book, в любом варианте кода»

textual
Листинг программы
  1.     for (j = 0; j < 20; j++) {
  2.         if (str[i]!='!'){
  3.             Book[k].Name[j]=str[i];
  4.             i++;
  5.         } else {
  6.             Book[k].Name[j]= '\0'; // Добавляем '\0' в конец строки
  7.             i++;
  8.             break;
  9.         }
  10.     }
  11.    
  12.     memset(Book[k].Adress,' ',sizeof(Book[k].Adress));
  13.    
  14.     for (j = 0; j < 32; j++) {
  15.         if (str[i]!='!') {
  16.             Book[k].Adress[j]=str[i];
  17.             i++;
  18.         } else {
  19.             Book[k].Adress[j]= '\0'; // Добавляем '\0' в конец строки
  20.             i+=2;
  21.             break;
  22.         }
  23.     }
  24.    
  25.     memset(Book[k].Number,' ',sizeof(Book[k].Number));
  26.    
  27.     for (j = 0; j < 10; j++) {
  28.         Book[k].Number[j]=str[i];
  29.         i++;
  30.     }
  31.     Book[k].Number[j]='\0';

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

В этом коде:

  1. Создается массив структур Book, каждая структура содержит три поля: Name, Adress и Number.
  2. В цикле заполняются поля Name, Adress и Number структур Book.
  3. Для каждого поля используется свой цикл for.
  4. Если встречается символ '!' в исходной строке, то добавляется символ '\0' в конец строки, чтобы отделить одно поле от другого.
  5. После заполнения всех полей, в поле Number добавляется символ '\0' в конце строки.

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


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

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

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

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

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

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