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

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

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

Здравствуйте! Не могу передать указатель на массив структур. Почему-то в функции оказывается лишь один первый элемент массива структур Book, в любом моем варианте кода. Везде пишут, что, чтобы передать массив структур в функцию, достаточно лишь передать его первый элемент в функцию, но не работает:
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <string.h>
#include <stdlib.h>
 
#define n 20

struct Phone
    {
     char Name[20]; //ФИО
     char Adress[32]; //Адрес
     char Number[12];  //номер телефона
    }T;
    struct Phone Book[n];
...
void sort (struct Phone *Book, int *B)   //пузырьковая сортировка
{
  int i,j;
 
  for (i=0;i<n-1;i++)
   {
    for(j=n-1;j>i;j--)
    {
    ...
    }
   }
}
...
int main()
{
sort (&Book[0], B);} //вызов функции, пробовала писать просто Book, тоже идет хорошо, но в функции только первый элемент
В идеале, мне нужно передать не всю структуру, а только Book[n].Number, это вообще не получается сделать, все время ругается компилятор.

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

textual
Листинг программы
    for (j = 0; j < 20; j++) {
        if (str[i]!='!'){
            Book[k].Name[j]=str[i];
            i++;
        } else {
            Book[k].Name[j]= '\0'; // Добавляем '\0' в конец строки
            i++;
            break;
        }
    }
    
    memset(Book[k].Adress,' ',sizeof(Book[k].Adress));
    
    for (j = 0; j < 32; j++) {
        if (str[i]!='!') {
            Book[k].Adress[j]=str[i];
            i++;
        } else {
            Book[k].Adress[j]= '\0'; // Добавляем '\0' в конец строки
            i+=2;
            break;
        }
    }
    
    memset(Book[k].Number,' ',sizeof(Book[k].Number));
    
    for (j = 0; j < 10; j++) {
        Book[k].Number[j]=str[i];
        i++;
    }
    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
Похожие ответы