Avatar billede koch Nybegynder
14. maj 2005 - 15:06 Der er 9 kommentarer og
1 løsning

Jeg får ikke gemt det korrekte når jeg bruger scanf

jeg har defineret følgende struct og array:
struct konto{
    char *name_player;
    int score;
};

//definerer et array af typen konto
struct konto player[2];

Når spillet starter vil jeg gerne have brugerne til at indtaste sine navne så jeg kan bruge dem i resten af spillet. Jeg bruger


      printf("Indtast navn på spiller 1 og 2: ");
      scanf("%s", &player[0].name_player, &player[1].name_player);
      printf("Velkommen til spillet %s og %s, i er de fødte tabere!\n\n", &player[0].name_player, &player[1].name_player);


Men hvis jeg taster et langt navn først så bliver de to navne blandet sammen. hvis jeg taster jacobjacobjacob som første navn og mads som andet navn, så kommer den første til at hedde jacobjacomads og den næste mads!

Hvis jeg bare kalder den første for jacob og den næste ffor mads, så skrives navnene rigtigt nok første gang. Når jeg referer til navnene senere i programmet, så hedder jacob kun jaco


Hvad er det jeg gør galt her?
Avatar billede arne_v Ekspert
14. maj 2005 - 15:10 #1
Prøv:

struct konto{
    char name_player[50];
    int score;
};

og

scanf("%s %s", player[0].name_player, player[1].name_player);
Avatar billede koch Nybegynder
14. maj 2005 - 15:20 #2
det løste første del af probelemet. Jeg refererer stadig til navnene med &player[0].name_player og &player[1].name_player i spillet.

Hvordan kan det være at pointeren ikke virker i starten, altså til lange navne? Er det bedre ikke at bruge ponitere?


I spillet får jeg stadig en fejl. Hvis jeg skriver
hvor current_player er 0 eller 1 afhængig af hvilken spiller det er...

printf("Forkert gæt %s! Din konto er nu paa %d\n\n", &player[current_player].name_player);
Avatar billede koch Nybegynder
14. maj 2005 - 15:23 #3
det virker nu. Det viste sig at fejlen var noget HELT andet som der havde indvirkning på dette! Der kan man se. Men mht. pointeren, kan du hjælpe med den? hvorfor den ikke virkede i starten?
Avatar billede arne_v Ekspert
14. maj 2005 - 15:25 #4
printf("Forkert gæt %s! Din konto er nu paa %d\n\n", &player[current_player].name_player);

skal også være

printf("Forkert gæt %s! Din konto er nu paa %d\n\n", player[current_player].name_player,player[current_player].score);
Avatar billede arne_v Ekspert
14. maj 2005 - 15:25 #5
pointere er gode men du skal jo have allokeret noget plads som pointeren kan
pege på - og du skal have det deallokeret igen
Avatar billede koch Nybegynder
14. maj 2005 - 15:39 #6
hvordan kunne jeg evt. have gjort det(allokeret plads først)?

Hvad er forskellen på om jeg har & eller ikke, når jeg refererer til navnene?
Avatar billede arne_v Ekspert
14. maj 2005 - 15:42 #7
struct konto{
    char *name_player;
    int score;
};

så vil

player[0].name_player = (char *) malloc(50);

allokere plads - og

free(player[0].name_player);

deallokere plads
Avatar billede arne_v Ekspert
14. maj 2005 - 15:43 #8
& betyder adressen på (og er overflødig da arrays altid sendes over som pointer)
Avatar billede koch Nybegynder
14. maj 2005 - 15:49 #9
Det er sgu kloge ord ;) Tak for hjælpen, smid endelig et svar.
Avatar billede arne_v Ekspert
14. maj 2005 - 15:51 #10
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester