Присвоение структуре другой структуры из массива структур - C (СИ)

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

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

Привет всем вот всё ковыряю задание с клубами. Из-за незнания нюансов и отсутствие практики не могу присвоить и отсортировать массив структур, помогите кому не лень ) Выбивает ошибку на sForSort = &aArrayClub[0];. Хочу score перевести в int и задействовать в сортировке но не могу присвоить дополнительной структуре структуру из массива которая бы вылетала, думаю мою мысль неглубокую понятно =) Кто может помочь помогите.
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
    /*1) створіть структуру Club з полями: name - назва клубу; city - місто, яке він представляє;
    * score - кількість набраних очок;*/
 
struct Club
{
    char cCity[255];
    char cName[255];
    char cScore[255];
};
 
struct AdditionalStructForSort
{
    char cCity[255];
    char cName[255];
    char cScore[255];
};
 
int main(void)
{
    struct AdditionalStructForSort sForSort;
    struct Club sClub;
    signed int i;
 
    for ( i = 0; i < 255; i++ )
    {
        sForSort.cCity[i] = 0;
        sForSort.cName[i] = 0;
        sForSort.cScore[i] = 0;
    }
 
    for ( i = 0; i < 255; i++ )
    {
        sClub.cCity[i] = 0;
        sClub.cName[i] = 0;
        sClub.cScore[i] = 0;
    }
 
    /* 2) створіть файл, в якій внесіть дані - майбутні значення полів структури Club
    * (кожне поле - з нового рядка, без пробілів!), кількість клубів - не менше 10
    * (розташувати у файлі в довільному порядку, не залежно від кількості очок);*/
 
    FILE *pClub;
 
    //3) збережіть створений файл як текстовий;
 
    pClub = fopen ( "FileAllClubs.txt", "a+" );
 
    printf ( "Input name city: " );
    gets ( sClub.cCity );
    printf ( "Input name club: " );
    gets ( sClub.cName );
    printf ( "Input score club: " );
    gets ( sClub.cScore );
 
    fprintf ( pClub, "%s\n%s\n%s\n", &sClub.cCity[0], &sClub.cName[0], &sClub.cScore[0] );
    fclose ( pClub );
 
    for ( i = 0; i < 255; i++ )
    {
        sClub.cCity[i] = 0;
        sClub.cName[i] = 0;
        sClub.cScore[i] = 0;
    }
 
    /*4) введіть з клавіатури число N - кількість клубів,
    дані про які потрібно прочитати з файлу;*/
 
    signed int N = 0;
    printf ( "Input N: " );
    scanf ( "%d", &N );
 
    //5) виділіть динамічно пам’ять для масиву з n структур;
 
    struct Club *aArrayClub = ( struct Club* ) malloc ( N * sizeof ( struct Club ) );
 
    if ( ( aArrayClub = ( struct Club* ) malloc ( N * sizeof ( struct Club ) ) ) == NULL )
    {
        printf ( "ERROR\n" );
        exit ( 1 );
    }
 
    pClub = fopen ( "FileAllClubs.txt", "r+" );
 
    //6) прочитайте у відповідний масив максимально можливу кількість даних про клуби;
 
    for ( i = 0; i < N; i++ )
    {
        fgets ( sClub.cCity, 255, pClub );
        strcpy ( aArrayClub[i].cCity, sClub.cCity );
        fgets ( sClub.cName, 255, pClub );
        strcpy ( aArrayClub[i].cName, sClub.cName );
        fgets ( sClub.cScore, 255, pClub );
        strcpy ( aArrayClub[i].cScore, sClub.cScore );
 
        puts ( aArrayClub[i].cCity );
        puts (aArrayClub[i].cName );
        puts ( aArrayClub[i].cScore );
 
    }
 
    fclose ( pClub );
 
    /*7) здійснить сортування даного масиву за спаданням кількості очок клубів -
    першим елементом щоб стала структура, клуб якої має максимальну кількість очок,
    і далі - в порядку зменшення;Примітка: - з метою обміну структур місцями оголосіть
    додаткову аналогічну структуру, в яку тимчасово будете копіювати ті, що підлягають перестановці;
    доступ до елементів масиву структур здійснюйте за допомогою покажчиків!*/
 
    signed int iValue = 0;
    signed int iMaxScore = 0;
 
    sForSort = &aArrayClub[0]; // <- Ошибка
 
    iMaxScore = atoi( aArrayClub[0].cScore );
 
    for( i = 0; i < N; i++ )
    {
        if( ( iValue = atoi( aArrayClub[i].cScore ) ) > iMaxScore )
        {
               iMaxScore = atoi( aArrayClub[i].cScore );
        }
    }
 
    printf( "%d", iMaxScore );
 
    /*8) дані відсортованого масиву виведіть до іншого текстового файлу
    (по можливості використовуючи форматування для кращої читабельності);
    перевірте файл на предмет правильного порядку розташування в ньому даних про клуби.*/
 
    FILE *pFinalClub;
    pFinalClub = fopen( "FinalClub.txt", "a+" );
    //fprintf ("" );
    fclose( pFinalClub );
 
   return 0;
}
Говорят что можно по елементно присваивать но что других способов нету?

Решение задачи: «Присвоение структуре другой структуры из массива структур»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
 
struct Club
{
    char cCity[255];
    char cName[255];
    char cScore[255];
 
}    sClubSort = {"0","0","0"}, 
     sClub     = {"0","0","0"};
 
int main(void)
{
    int i;
    struct Club *arrClub = (Club*)malloc(sizeof(struct Club[5]));
    
    if (arrClub){
        printf("Memory good");
        
        for(i=0;i<5;i++){
            arrClub[i]=sClub;
        }
        
        for(int i=0; i<5; i++){
        sClub=arrClub[i];               
        printf("\n %s \t %s \t %s \t",arrClub[i].cCity,arrClub[i].cName,arrClub[i].cScore);
        }
    }
        free(arrClub);
        system("pause");//windows console
}

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

  1. Структура Club объявлена с полями cCity, cName, cScore.
  2. Объявлен массив структур arrClub типа Club* размером 5.
  3. Выделен память под массив структур с помощью malloc.
  4. Проверяется успешность выделения памяти с помощью if (arrClub).
  5. Если память успешно выделена, то выводится сообщение Memory good.
  6. В цикле for массиву arrClub присваиваются значения структуры sClub.
  7. В цикле for выводятся значения полей структуры arrClub на экран.
  8. Выделяется память под sClub с помощью free.
  9. Выполняется system(pause), чтобы приостановить выполнение программы до нажатия клавиши в консоли.
  10. Значения полей структуры sClub присваиваются значениям arrClub[i].

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


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

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

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