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
    ralpf

    Wo 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.


Anmelden zum Antworten