В функции оказывается лишь один первый элемент массива структур Book, в любом варианте кода - C (СИ)
Формулировка задачи:
Здравствуйте! Не могу передать указатель на массив структур. Почему-то в функции оказывается лишь один первый элемент массива структур Book, в любом моем варианте кода. Везде пишут, что, чтобы передать массив структур в функцию, достаточно лишь передать его первый элемент в функцию, но не работает:
В идеале, мне нужно передать не всю структуру, а только Book[n].Number, это вообще не получается сделать, все время ругается компилятор.
#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, в любом варианте кода»
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';
Объяснение кода листинга программы
В этом коде:
- Создается массив структур Book, каждая структура содержит три поля: Name, Adress и Number.
- В цикле заполняются поля Name, Adress и Number структур Book.
- Для каждого поля используется свой цикл for.
- Если встречается символ '!' в исходной строке, то добавляется символ '\0' в конец строки, чтобы отделить одно поле от другого.
- После заполнения всех полей, в поле Number добавляется символ '\0' в конце строки.