"struct" объекты с "for-loop" в программировании на C - PullRequest
0 голосов
/ 10 декабря 2011

Этот код о 'struct' в C ..

Я создал struct spieler со свойствами name и age. Используя цикл for, я позволил пользователю создавать объекты struct.они называются sp [i] -> sp1, sp2 и т. д.

проблема в том, что объекты создаются.Но я могу использовать их только внутри цикла.Если я хочу получить значение "sp1.name" в основной функции, это не сработает.Как я могу решить это?

struct spieler{
  char name[20];
  int age;
};

void erzeuge();

int main() {

int anzahl = 2;
printf("Anzahl Spielern: ");
scanf("%d",&anzahl);

erzeuge(anzahl);

printf("Es sind %d Spielern",anzahl);
/*for(i;i<anzahl;i++){
    printf("%d.%s",i, sp[i].name);
}*/

getchar();

}

void erzeuge(int anzahl){

int i=0;
for(i;i<anzahl;i++){
    struct spieler sp[i];
    printf("Struct fuer Spieler_%d wurde erzeugt\n", i);
    getchar();
    printf("Name: ");
    scanf("%s",sp[i].name);

    printf("%s\n",sp[i].name);
}

Ответы [ 3 ]

1 голос
/ 10 декабря 2011

Вы должны объявить sp как указатель на глобальную область видимости и выделить для него память внутри функции erzeuge, используя malloc.

#include <stdlib.h>
#include <stdio.h>

struct spieler {
    char name[20];
    int age;
};

struct spieler *sp;    // Add this

void erzeuge();

int main() {
    int anzahl;
    printf("Anzahl Spielern: ");
    scanf("%d", &anzahl);

    erzeuge(anzahl);

    printf("Es sind %d Spielern\n", anzahl);

    int i;
    for(i = 0; i < anzahl; i++){
        printf("%d.%s\n", i, sp[i].name);
    }

    if (sp) {
        free(sp);
    }
    getchar();
    return 0;
}

void erzeuge(int anzahl) {
    // Add the following line to allocate memory
    sp = (struct spieler*) malloc(anzahl * sizeof(struct spieler));

    int i;
    for (i = 0; i < anzahl; i++) {
        // Remove the following line because it create an array of "i" elements
        // struct spieler sp[i];
        printf("Struct fuer Spieler_%d wurde erzeugt\n", i);
        getchar();
        printf("Name: ");
        scanf("%s",sp[i].name);

        printf("%s\n",sp[i].name);
    }
}
1 голос
/ 10 декабря 2011

Вы должны вернуть массив игроков из erzeuge, что-то вроде

struct spieler *erzeuge(int anzahl){
    struct spieler *mannschaft = malloc(anzahl*sizeof(struct spieler));
    int i;
    for(i = 0; i < anzahl; ++i){
        // prompt
        scanf("%18s",&mannschaft[i].name);
        ...
    }
    return mannschaft;
}
0 голосов
/ 10 декабря 2011

Альтернативное решение без malloc:

void erzeuge(struct spieler* sp, int anzahl)
{
    ...
}

int main()
{
    int anzahl = 2;

    ...

    struct spieler sp[anzahl];
    erzeuge(sp,anzahl);

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...