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

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

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

Привет всем вот всё ковыряю задание с клубами. Из-за незнания нюансов и отсутствие практики не могу присвоить и отсортировать массив структур, помогите кому не лень ) Выбивает ошибку на sForSort = &aArrayClub[0];. Хочу score перевести в int и задействовать в сортировке но не могу присвоить дополнительной структуре структуру из массива которая бы вылетала, думаю мою мысль неглубокую понятно =) Кто может помочь помогите.
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. /*1) створіть структуру Club з полями: name - назва клубу; city - місто, яке він представляє;
  6. * score - кількість набраних очок;*/
  7. struct Club
  8. {
  9. char cCity[255];
  10. char cName[255];
  11. char cScore[255];
  12. };
  13. struct AdditionalStructForSort
  14. {
  15. char cCity[255];
  16. char cName[255];
  17. char cScore[255];
  18. };
  19. int main(void)
  20. {
  21. struct AdditionalStructForSort sForSort;
  22. struct Club sClub;
  23. signed int i;
  24. for ( i = 0; i < 255; i++ )
  25. {
  26. sForSort.cCity[i] = 0;
  27. sForSort.cName[i] = 0;
  28. sForSort.cScore[i] = 0;
  29. }
  30. for ( i = 0; i < 255; i++ )
  31. {
  32. sClub.cCity[i] = 0;
  33. sClub.cName[i] = 0;
  34. sClub.cScore[i] = 0;
  35. }
  36. /* 2) створіть файл, в якій внесіть дані - майбутні значення полів структури Club
  37. * (кожне поле - з нового рядка, без пробілів!), кількість клубів - не менше 10
  38. * (розташувати у файлі в довільному порядку, не залежно від кількості очок);*/
  39. FILE *pClub;
  40. //3) збережіть створений файл як текстовий;
  41. pClub = fopen ( "FileAllClubs.txt", "a+" );
  42. printf ( "Input name city: " );
  43. gets ( sClub.cCity );
  44. printf ( "Input name club: " );
  45. gets ( sClub.cName );
  46. printf ( "Input score club: " );
  47. gets ( sClub.cScore );
  48. fprintf ( pClub, "%s\n%s\n%s\n", &sClub.cCity[0], &sClub.cName[0], &sClub.cScore[0] );
  49. fclose ( pClub );
  50. for ( i = 0; i < 255; i++ )
  51. {
  52. sClub.cCity[i] = 0;
  53. sClub.cName[i] = 0;
  54. sClub.cScore[i] = 0;
  55. }
  56. /*4) введіть з клавіатури число N - кількість клубів,
  57. дані про які потрібно прочитати з файлу;*/
  58. signed int N = 0;
  59. printf ( "Input N: " );
  60. scanf ( "%d", &N );
  61. //5) виділіть динамічно пам’ять для масиву з n структур;
  62. struct Club *aArrayClub = ( struct Club* ) malloc ( N * sizeof ( struct Club ) );
  63. if ( ( aArrayClub = ( struct Club* ) malloc ( N * sizeof ( struct Club ) ) ) == NULL )
  64. {
  65. printf ( "ERROR\n" );
  66. exit ( 1 );
  67. }
  68. pClub = fopen ( "FileAllClubs.txt", "r+" );
  69. //6) прочитайте у відповідний масив максимально можливу кількість даних про клуби;
  70. for ( i = 0; i < N; i++ )
  71. {
  72. fgets ( sClub.cCity, 255, pClub );
  73. strcpy ( aArrayClub[i].cCity, sClub.cCity );
  74. fgets ( sClub.cName, 255, pClub );
  75. strcpy ( aArrayClub[i].cName, sClub.cName );
  76. fgets ( sClub.cScore, 255, pClub );
  77. strcpy ( aArrayClub[i].cScore, sClub.cScore );
  78. puts ( aArrayClub[i].cCity );
  79. puts (aArrayClub[i].cName );
  80. puts ( aArrayClub[i].cScore );
  81. }
  82. fclose ( pClub );
  83. /*7) здійснить сортування даного масиву за спаданням кількості очок клубів -
  84. першим елементом щоб стала структура, клуб якої має максимальну кількість очок,
  85. і далі - в порядку зменшення;Примітка: - з метою обміну структур місцями оголосіть
  86. додаткову аналогічну структуру, в яку тимчасово будете копіювати ті, що підлягають перестановці;
  87. доступ до елементів масиву структур здійснюйте за допомогою покажчиків!*/
  88. signed int iValue = 0;
  89. signed int iMaxScore = 0;
  90. sForSort = &aArrayClub[0]; // <- Ошибка
  91. iMaxScore = atoi( aArrayClub[0].cScore );
  92. for( i = 0; i < N; i++ )
  93. {
  94. if( ( iValue = atoi( aArrayClub[i].cScore ) ) > iMaxScore )
  95. {
  96. iMaxScore = atoi( aArrayClub[i].cScore );
  97. }
  98. }
  99. printf( "%d", iMaxScore );
  100. /*8) дані відсортованого масиву виведіть до іншого текстового файлу
  101. (по можливості використовуючи форматування для кращої читабельності);
  102. перевірте файл на предмет правильного порядку розташування в ньому даних про клуби.*/
  103. FILE *pFinalClub;
  104. pFinalClub = fopen( "FinalClub.txt", "a+" );
  105. //fprintf ("" );
  106. fclose( pFinalClub );
  107. return 0;
  108. }
Говорят что можно по елементно присваивать но что других способов нету?

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. struct Club
  6. {
  7.     char cCity[255];
  8.     char cName[255];
  9.     char cScore[255];
  10.  
  11. }    sClubSort = {"0","0","0"},
  12.      sClub     = {"0","0","0"};
  13.  
  14. int main(void)
  15. {
  16.     int i;
  17.     struct Club *arrClub = (Club*)malloc(sizeof(struct Club[5]));
  18.    
  19.     if (arrClub){
  20.         printf("Memory good");
  21.        
  22.         for(i=0;i<5;i++){
  23.             arrClub[i]=sClub;
  24.         }
  25.        
  26.         for(int i=0; i<5; i++){
  27.         sClub=arrClub[i];              
  28.         printf("\n %s \t %s \t %s \t",arrClub[i].cCity,arrClub[i].cName,arrClub[i].cScore);
  29.         }
  30.     }
  31.         free(arrClub);
  32.         system("pause");//windows console
  33. }

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

  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

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

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

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