Char Strings speichern
-
Hallo zusammen,
ein Freund und ich sind dabei ein Spiel zu programmieren, jedoch hänge ich an der Namens-Funktion ein wenig.
Leider habe ich den Quelltext jetzt nicht hier, weil ich in der Schule bin, kann das Problem aber leicht erklären.Es ist ein Spiel für n Spieler, deshalb brauchen wir eine variable Anzahl Namensspeichern.
Nun habe ich mit gets(string); Namen eingelesen, was auch wunderbar klappt.
Jetzt zu meiner Frage:
Wo kann ich Char Strings speichern ohne mehrere Variablen anlegen zu müssen?
Ich habe daran gedacht diese Namen wie Zahlen in einem Feld zu speichern, hat aber nicht geklappt.btw sorry das kein Quelltext bei liegt
schon mal danke
kwest
-
Klar kannst du auch Arrays von char-Arrays anlegen (entweder mit fester Größe oder sogar dynamisch):
//statisch: char namen[5][21];//5 Namen mit maximal 20 Zeichen int anz; printf("Wieviele Spieler? (1 bis 5)");scanf("%d",&anz); for(int i=0;i<anz;++i) fgets(namen[i],21,stdin);//sicherer als gets() //dynamisch: char*namen[21];//Zeiger auf Namensfeld int anz; printf("Wieviele Spieler?");scanf("%d",&anz); if(anz<=0) return; namen=malloc(anz*21); for(int i=0;i<anz;++i) fgets(namen[i],21,stdin);//sicherer als gets()
-
Das ist aber jetzt speziell C++ oder?
Wegen der deklarierung von i erst in der for-schleife und den fehlenden Klammern.
Aber schon mal danke!
-
kwest schrieb:
Das ist aber jetzt speziell C++ oder?
Eigentlich sollte das (abgesehen vielleicht von der Schleifenvariable) in C funktionieren.
Wegen der deklarierung von i erst in der for-schleife
Sorry, das vergesse ich immer wieder - C ist nicht so frei mit der Anordnung der Variablendeklarationen
und den fehlenden Klammern.
Welche Klammern?
(PS: In C++ hätte ich einen vector<string> verwendet)
-
Aso, ja danke es klappt aber er gibt jetzt folgendes aus:
void main ( void ) { char name[5][21]; int anzahl, i; Cls(); printf("Wie viele Spieler: "); scanf("%i", &anzahl); for(i=1;i<anzahl;i++) { printf("Bitte %i. Namen eingeben: ", i); fgets(name[i],21,stdin); printf("%s", name[i]); } }
Wie viele Spieler: 4
Bitte 1. Namen eingeben:
Bitte 2. Namen eingeben: karl
karl
Bitte 3. Namen eingeben: ralpf
ralpfWo liegt der Fehler?
Danke schonmal,
kwest
-
erstens könnte es sein, daß du vor dem fgets() noch ein fflush(stdout) benötigst - und zweitens ist deine Schleifenbedingung falsch (in C beginnen Array-Indizes mit 0):
for(i=0;i<anzahl;++i) { printf("Bitte %d. Namen angeben:",i+1);fflush(stdout); fgets(name[i],21,stdin); printf("Name war: %s\n",name[i]); }
(PS: Wenn du mit einem Array fester Größe arbeitest, solltest du noch abfragen, ob anzahl<=5 ist)
-
void main ( void ) { char name[5][21]; int anzahl, i; Cls(); printf("Wie viele Spieler: "); scanf("%i", &anzahl); getchar(); //liest das \n aus dem Tastaturbuffer, //ansonsten wird das erste fgets übersprungen! for(i=0;i<anzahl;i++) //da hat CStoll recht, es beginnt bei 0! { printf("Bitte %i. Namen eingeben: ", i); fgets(name[i],21,stdin); printf("%s", name[i]); } }
-
@strcat: es heißt übrigens int main(void)
-
CStoll schrieb:
kwest schrieb:
Wegen der deklarierung von i erst in der for-schleife
Sorry, das vergesse ich immer wieder - C ist nicht so frei mit der Anordnung der Variablendeklarationen
Das geht seit C99 auch in C.