Spieler Abfrage



  • Ok danke DirkB habe ich so weit verstanden.
    aber laut diesem Tutorial http://www.c-howto.de/tutorial-strings-zeichenketten.html sind Strings eben so char-arrays heißt also ich brauche dennoch nur spieler[8]? also so zu sagen setzte ich das maximum fest?
    so zu sagen so

    char spielerName(int *anzahl) {
    	int i;
    	char spieler[8];
    	for(i=0;i<&anzahl;i++){
    		printf("Bitte gib deinen Namen ein: ");
    		scanf("%s", &spieler[i]);
    	}
    return spieler;
    

    ist das ausreichend oder bin ich da wieder falsch?



  • Was sagt denn der Compiler dazu?
    Beachte auch die Warnungen. Stelle den Warnlevel des Compilers sehr hoch ein.

    C lässt sehr viele Konstrukte zu, auch wenn sie falsch sind. In diesen Fällen gibt der Compiler eine Warnung aus.

    Ein char-Array ist ein ganz anderer Datentyp als ein char .
    Der Typ beim return muss zu dem Typ vom Rückgabewert bei der Definition passen.
    (in Zeile 1 steht char , in Zeile 8 gibst du ein char[] zurück (was so auch nicht geht).)

    Hast du die Übungen in dem Tutorial mal angesehen und auch verstanden?
    Wird da irgendwo ein Array, das in einer Funktion definiert ist, mit return zurück gegeben?
    Und wenn es so aussieht als ob, welchen Datentyp hat dann der Rückgabewert?

    Eine mögliche Lösung:
    Definiere ein Array in main für deine Spieler.

    char spieler[8][15]; // maximal 8 Spieler, deren Namen 14 Zeichen lang sein können.
    

    Die 8 und 15 kannst du auch über Makros festlegen.
    Dieses Array (oder Teile davon) übergibst du dann an die Funktion, die die/den Namen einliest.

    Was du da mit den Sonderzeichen vor anzahl machst, ist doch auch nur geraten (und sinnfrei)

    Es gibt keine guten Online-Tutorials für C. Und auf deutsch sind es noch weniger.
    Du brauchst ein Buch.



  • Du bist leider immer noch weit davon entfernt.

    An dieser Stelle macht es in Anbetracht deines Codes leider wenig Sinn dir die Lösung zu präsentieren, da es dir an einigen Grundlagen zu fehlen scheint.

    Mit welchen Mitteln versucht du dir denn C beizubringen?
    Es sieht so aus als wäre da zu viel Halbwissen durch google verknüpfen im Spiel.
    Du solltest dir zunächst ein Buch besorgen, da du sonst nie fundiertes Können in der Sprache erlangen wirst - oder eben nur sehr viel umständlicher.

    Büchervorschläge findest du jede Menge hier im Forum.



  • Ok verstehe. Ich dachte wohl wirklich ich könnte es über das Internet lernen. 😃
    hab wohl falsch gedacht...
    Ich hoffe das es ein gutes Deutsches Buch für C gibt und werde jetzt mal das Forum danach durchstöbern.
    cvcv eine sache hätte ich da noch. Ich möchte dir danken, dass du mir nicht den lösungs vorschlag gesagt hast denn ich will es ja lernen und verstehen.
    DirkB Danke für deine Mühen und deinen Vorschlag. Ich werde wohl als auch übel auf das Buch zurück greifen.
    Aber kannst du mir vielleicht noch eine Sache beantworten?
    Ist es klug mit C das Programmieren zu lernen oder soll ich da lieber gleich was anderes lernen?
    Mein Ziel ist es später irgendwann spiele zu programmieren.

    Danke Leute und verzeiht mir bitte, dass ich so doofe sachen immer frage 😃 😃 😃



  • C ist nichts für Anfänger, obwohl das vielfach behauptet wird.



  • C ist eine einfache Sprache.
    Das macht sie aber nicht leicht lernbar.

    Informierr dich mal, in welcher Sprache (und Toolkits) deine Favoritenspiele programmiert sind.



  • Nach langem grübeln und rumzicken habe ich es endlich Geschafft!
    DirkB Ich danke dir tausendfach!
    Ich weiß nicht wirklich warum ich das jetzt mache aber du bist für mich irgendwie so wie ein Mentor.
    Darum will ich dir jetzt das End-Produkt präsentieren:
    aber zu erst will ich dir zeigen was ich so alles damit angestellt habe xD und jup ich weiß, dass ich mir gerade keine freund machen mit dem post aber ich will damit nur sagen ich bin lern willig.

    void spielerabfrage(int anzahl) {
    	char spieler1[15], spieler2[15], spieler3[15], spieler4[15], spieler5[15], spieler6[15], spieler7[15], spieler8[15];
    	switch(anzahl) {
    		case 1: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				break;
    		case 2: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				break;
    		case 3: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				printf("Bitte gibt den Namen des 3. Spielers ein: ");
    				scanf("%s", spieler3);
    				break;
    		case 4: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				printf("Bitte gibt den Namen des 3. Spielers ein: ");
    				scanf("%s", spieler3);
    				printf("Bitte gibt den Namen des 4. Spielers ein: ");
    				scanf("%s", spieler4);
    				break;
    		case 5: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				printf("Bitte gibt den Namen des 3. Spielers ein: ");
    				scanf("%s", spieler3);
    				printf("Bitte gibt den Namen des 4. Spielers ein: ");
    				scanf("%s", spieler4);
    				printf("Bitte gibt den Namen des 5. Spielers ein: ");
    				scanf("%s", spieler5);
    				break;
    		case 6: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				printf("Bitte gibt den Namen des 3. Spielers ein: ");
    				scanf("%s", spieler3);
    				printf("Bitte gibt den Namen des 4. Spielers ein: ");
    				scanf("%s", spieler4);
    				printf("Bitte gibt den Namen des 5. Spielers ein: ");
    				scanf("%s", spieler5);
    				printf("Bitte gibt den Namen des 6. Spielers ein: ");
    				scanf("%s", spieler6);
    				break;
    		case 7: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				printf("Bitte gibt den Namen des 3. Spielers ein: ");
    				scanf("%s", spieler3);
    				printf("Bitte gibt den Namen des 4. Spielers ein: ");
    				scanf("%s", spieler4);
    				printf("Bitte gibt den Namen des 5. Spielers ein: ");
    				scanf("%s", spieler5);
    				printf("Bitte gibt den Namen des 6. Spielers ein: ");
    				scanf("%s", spieler6);
    				printf("Bitte gibt den Namen des 7. Spielers ein: ");
    				scanf("%s", spieler7);
    				break;
    		case 8: printf("Bitte gibt den Namen des 1. Spielers ein: ");
    				scanf("%s", spieler1);
    				printf("Bitte gibt den Namen des 2. Spielers ein: ");
    				scanf("%s", spieler2);
    				printf("Bitte gibt den Namen des 3. Spielers ein: ");
    				scanf("%s", spieler3);
    				printf("Bitte gibt den Namen des 4. Spielers ein: ");
    				scanf("%s", spieler4);
    				printf("Bitte gibt den Namen des 5. Spielers ein: ");
    				scanf("%s", spieler5);
    				printf("Bitte gibt den Namen des 6. Spielers ein: ");
    				scanf("%s", spieler6);
    				printf("Bitte gibt den Namen des 7. Spielers ein: ");
    				scanf("%s", spieler7);
    				printf("Bitte gibt den Namen des 8. Spielers ein: ");
    				scanf("%s", spieler8);
    				break;
    		default: printf("Es sind zu viele Spieler\n");
    	}
    	switch(anzahl) {
    		case 8: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				printf("Der 3 Spieler heisst %s\n", spieler1);
    				printf("Der 4 Spieler heisst %s\n", spieler1);
    				printf("Der 5 Spieler heisst %s\n", spieler1);
    				printf("Der 6 Spieler heisst %s\n", spieler1);
    				printf("Der 7 Spieler heisst %s\n", spieler1);
    				printf("Der 8 Spieler heisst %s\n", spieler1);
    				break;
    		case 7: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				printf("Der 3 Spieler heisst %s\n", spieler1);
    				printf("Der 4 Spieler heisst %s\n", spieler1);
    				printf("Der 5 Spieler heisst %s\n", spieler1);
    				printf("Der 6 Spieler heisst %s\n", spieler1);
    				printf("Der 7 Spieler heisst %s\n", spieler1);
    				break;
    		case 6: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				printf("Der 3 Spieler heisst %s\n", spieler1);
    				printf("Der 4 Spieler heisst %s\n", spieler1);
    				printf("Der 5 Spieler heisst %s\n", spieler1);
    				printf("Der 6 Spieler heisst %s\n", spieler1);
    				break;
    		case 5: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				printf("Der 3 Spieler heisst %s\n", spieler1);
    				printf("Der 4 Spieler heisst %s\n", spieler1);
    				printf("Der 5 Spieler heisst %s\n", spieler1);
    				break;
    		case 4: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				printf("Der 3 Spieler heisst %s\n", spieler1);
    				printf("Der 4 Spieler heisst %s\n", spieler1);
    				break;
    		case 3: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				printf("Der 3 Spieler heisst %s\n", spieler1);
    				break;
    		case 2: printf("Der 1 Spieler heisst %s\n", spieler1);
    				printf("Der 2 Spieler heisst %s\n", spieler1);
    				break;
    		case 1: printf("Der 1 Spieler heisst %s\n", spieler1);
    				break;
    		}
    }
    

    Tja kacken kilometer text für so einen scheiß (verzeiht den Kraftausdruck aber is wahr eh) hab dann noch lange rum experimentiert und habe das rausbekommen war so deutlich besser ist oder?^^

    int i, j, anzahl=3;
    	char spieler[8][15], temp;
    
    	for(i=0;i<anzahl;i++) {
    		for(j=0;j<1;j++) {
    			printf("Bitte gib einen Namen ein: ");
    			scanf("%s", &spieler[i][j]);
    			}
    		printf("\n");
    	}
    	for(i=0;i<anzahl;i++) {
    		printf("Der %d Spieler heisst %s", i+1, spieler[i]);
    		printf("\n");
    	}
    

    manchmal sind die einfachsten dinge die Schwersten.
    Ich bin jedenfals stolz auf mich, dass ich das alleine hinbekommen habe!



  • Was soll denn bitte diese for(j=0;... Schleife bei der Eingabe? 😮

    Welchen Wert hat da denn j? Genua 0.
    Dann reicht ein j=0; aus.
    Am Besten noch ohne Variable, schreib statt j gleich 0.

    printf("Bitte gib den Namen fuer Spieler %d ein: ", i);
      scanf("%14s", &spieler[i][0]);
    

    Statt &spieler[i][0] kannst du auch nur spieler[i] (ohne &) schreiben.



  • case 8: printf("Bitte gibt den Namen des 1. Spielers ein: "); 
                    scanf("%s", spieler1); 
                    printf("Bitte gibt den Namen des 2. Spielers ein: "); 
                    scanf("%s", spieler2); 
                    printf("Bitte gibt den Namen des 3. Spielers ein: "); 
                    scanf("%s", spieler3); 
                    printf("Bitte gibt den Namen des 4. Spielers ein: "); 
                    scanf("%s", spieler4); 
                    printf("Bitte gibt den Namen des 5. Spielers ein: "); 
                    scanf("%s", spieler5); 
                    printf("Bitte gibt den Namen des 6. Spielers ein: "); 
                    scanf("%s", spieler6); 
                    printf("Bitte gibt den Namen des 7. Spielers ein: "); 
                    scanf("%s", spieler7); 
                    printf("Bitte gibt den Namen des 8. Spielers ein: "); 
                    scanf("%s", spieler8); 
                    break;
    

    Wie wärs stattdessen mit:

    printf("Bitte gibt den Namen des %d. Spielers ein: ", anzahl); 
    scanf("%s", spieler[anzahl-1]);
    

    spieler ist in dem Fall ein zwei-Dimensionales Array.
    Spart ein klein wenig Code 😃

    switch(anzahl) {
            case 8: printf("Der 1 Spieler heisst %s\n", spieler1);
                    printf("Der 2 Spieler heisst %s\n", spieler1);
                    printf("Der 3 Spieler heisst %s\n", spieler1);
                    printf("Der 4 Spieler heisst %s\n", spieler1);
                    printf("Der 5 Spieler heisst %s\n", spieler1);
                    printf("Der 6 Spieler heisst %s\n", spieler1);
                    printf("Der 7 Spieler heisst %s\n", spieler1);
                    printf("Der 8 Spieler heisst %s\n", spieler1);
                    break;
    

    Das hier geht auch viel einfacher:

    for (i=1; i<=anzahl; i++)
        printf("Der %d Spieler heißt %s\n", i, spieler[i-1]);
    

    Oder ist es Absicht, dass du 8 mal Spieler 1 ausgibst?



  • @Bitmapper

    So in etwa wollte ich auch antworten. 😃
    Ich habe aber bis zum Ende gelesen, wo der Autor voller Stolz selber geschrieben hat, dass er auf deine Lösung gekommen ist. 🙄



  • DirkB schrieb:

    @Bitmapper

    So in etwa wollte ich auch antworten. 😃
    Ich habe aber bis zum Ende gelesen, wo der Autor voller Stolz selber geschrieben hat, dass er auf deine Lösung gekommen ist. 🙄

    Ah sorry, ich hätte mir wohl den Text durchlesen sollen 🙂



  • DirkB schrieb:

    Was soll denn bitte diese for(j=0;... Schleife bei der Eingabe? 😮

    Welchen Wert hat da denn j? Genua 0.
    Dann reicht ein j=0; aus.
    Am Besten noch ohne Variable, schreib statt j gleich 0.

    printf("Bitte gib den Namen fuer Spieler %d ein: ", i);
      scanf("%14s", &spieler[i][0]);
    

    Statt &spieler[i][0] kannst du auch nur spieler[i] (ohne &) schreiben.

    Coole idee aber leider funktioniert das bei mir nicht 😞
    wenn ich es so mache dann gebe ich die namen ganz normal ein und nehmen wir an wir haben 3 spieler die heißen Josef Hans und Maier.
    dann gibt er mir den letzten spieler aus also Maier und aus hans und josef wird ein zufälliger wert aber nicht mehr der name.

    muss ich also dennoch mit der for schleife machen oder wie?



  • for(i=0;i<anzahl;i++) {
       printf("Bitte gib den Namen fuer Spieler %d ein: ", i);
       scanf("%14s", spieler[i]);	
       printf("\n");
     }
      for(i=0;i<anzahl;i++) {
            printf("Der %d Spieler heisst %s\n", i+1, spieler[i]);
        }
    

    Das funktioniert nicht?



  • DirkB schrieb:

    for(i=0;i<anzahl;i++) {
       printf("Bitte gib den Namen fuer Spieler %d ein: ", i);
       scanf("%14s", spieler[i]);	
       printf("\n");
     }
      for(i=0;i<anzahl;i++) {
            printf("Der %d Spieler heisst %s\n", i+1, spieler[i]);
        }
    

    Das funktioniert nicht?

    Doch jetzt schon via copy paste aber dann weiß ich nicht was ich falsch hatte denn bei mir funtionierte es nicht.



  • @Azumi: du bist so mächtig auf den Holzweg. Du verstehst nach wie vor nicht, was Arrays sind, wie man mit ihnen umgeht, und vor allem, was ein String ist und wie es in C dargestellt wird.

    Ohne dieses Wissen sind all deine Versuche zum Scheitern verurteilt, hin und wieder mag etwas "funktionieren" (sieht nur dank Zufalls so aus, als ob) aber du weißt immer noch nicht warum.

    Lerne erstmal die Grundlagen von C, vor allem wie man mit Arrays umgeht. Dann wirst du sehen, dass dein Program sehr leicht zu programmieren ist.



  • supertux schrieb:

    @Azumi: du bist so mächtig auf den Holzweg. Du verstehst nach wie vor nicht, was Arrays sind, wie man mit ihnen umgeht, und vor allem, was ein String ist und wie es in C dargestellt wird.

    Ohne dieses Wissen sind all deine Versuche zum Scheitern verurteilt, hin und wieder mag etwas "funktionieren" (sieht nur dank Zufalls so aus, als ob) aber du weißt immer noch nicht warum.

    Lerne erstmal die Grundlagen von C, vor allem wie man mit Arrays umgeht. Dann wirst du sehen, dass dein Program sehr leicht zu programmieren ist.

    Danke weiß ich aber leider schon mittlerweile. ich habe dies nur fertig machen müssen.
    und mittlerweile habe ich mir schon das buch http://www.thalia.at/shop/programmiersprachen-2531/rubrikartikel/c_programmieren_von_anfang_an/helmut_erlenkoetter/EAN9783499600746/ID2945863.html;jsessionid=BC4FACA8838FFEAC1EEC421F3BB1386C.tc4p
    bestellt und werde dies jetzt mal so versuchen zu lernen.
    aber danke


Anmelden zum Antworten