Присвоение структуре другой структуры из массива структур - 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 }
Объяснение кода листинга программы
- Структура
Club
объявлена с полямиcCity
,cName
,cScore
. - Объявлен массив структур
arrClub
типаClub*
размером 5. - Выделен память под массив структур с помощью
malloc
. - Проверяется успешность выделения памяти с помощью
if (arrClub)
. - Если память успешно выделена, то выводится сообщение
Memory good
. - В цикле
for
массивуarrClub
присваиваются значения структурыsClub
. - В цикле
for
выводятся значения полей структурыarrClub
на экран. - Выделяется память под
sClub
с помощьюfree
. - Выполняется
system(
pause)
, чтобы приостановить выполнение программы до нажатия клавиши в консоли. - Значения полей структуры
sClub
присваиваются значениямarrClub[i]
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д