Schleife wird nicht ausgeführt hilfe



  • Hey Leute,

    ich bin ein Ziemlicher Anfänger in Sachen Programmieren mache gerade eine Ausbildung habe ein Problem mit der Ausführung der Schleife ich verwende DEV-C++ und verstehe nicht ganz warum er die Schleife nicht ausführt. Das Programm wird nach der Eingabe der Namen beendet.
    kann mir einer sagen warum.
    Gruß Flo

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */

    int main(int argc, char *argv[])
    {
    char spieler1[10];
    char spieler2[10];
    int spieler1a;
    int spieler2a;
    int spieler1g =0;
    int spieler2g =0;

    printf("Willkommen bei Stein, Schere und Papier\n");
    printf("================================================\n");
    printf("Wer zu erst 3 Runden gewinnt, gewinnt das Spiel\n");
    printf("Das Duell soll beginnen!!!\n");
    printf("Spieler 1 gib deinen Namen ein:\n");
    scanf("%s",&spieler1);
    printf("Spieler 2 gib nun deinen Namen ein:\n");
    scanf("%s",&spieler2);
    printf("Lasst das Spiel beginnen\n");
    
    	while(spieler1g==3||spieler2g==3)
    	{
    		printf("Wählt eure Waffen!\n");
    		printf("Stein=1\n Schere=2\n Papier=3\n");
    		printf("%s du zuerst\n",spieler1);
    		scanf("%d",&spieler1a);
    		printf("Jetzt du %s\n",spieler2);
    		scanf("%d",&spieler2a);
    		printf("%s deine Entscheidung:%i\n",spieler1,spieler1a);
    		printf("%s deine Entscheidung:%i\n",spieler2,spieler2a);
    		printf("der Zwischenstand:\n%s:%d\n%s:%d\n",spieler1,spieler1g,spieler2,spieler2g);
    			if (spieler1a==spieler2a)
    			{
    				printf("Unentschieden keiner bekommt ein Punkt\n");
    				spieler1g+0;
    				spieler2g+0;
    			}
    			if ((spieler1a==1&&spieler2a==2)||(spieler1a==2&&spieler2a==3)||(spieler1a==3&&spieler2a==1))
    			{
    				printf("%s hat die Runde gewonnen",spieler1);
    				spieler1g+1;
    				spieler2g+0;
    			}
    			else
    			{
    				printf("%s hat die Runde gewonnen",spieler2);
    				spieler1g+0;
    				spieler2g+1;
    			}
    	
    			if (spieler1g==3)
    			{
    				printf("%s hat das Spiel gewonnen\n",spieler1);
    			}
    			if (spieler2g==3)
    			{
    				printf("%s hat das Spiele gewonnen\n",spieler2);
    			}
    	}
    

    return 0;
    }



  • spieler1g ist gleich 0 und spieler2g ist auch gleich 0, das heißt, die bedingung ist nicht erfüllt und die schleife wird nicht ausgeführt.

    nebenbei erwähnt übergibt man an scanf beim spezifizierer %s die adresse des 1. elements, d.h. spieler1 bzw. spieler2, und nicht die adresse des arrays selbst.



  • @Wade1234 danke für die info habs geändert funktioniert trotzdem nicht

    das mit dem %s versteh ich nicht ganz



  • @Ares sagte in Schleife wird nicht ausgeführt hilfe:

    danke für die info habs geändert funktioniert trotzdem nicht

    na, dann ist ja alles gut.



  • naja wenn du bspw. einen integer einlesen möchtest, schreibst du scanf("%d", &integername), wobei integername der name der variable und &integername die adresse der variable integername ist. faktisch schreibt scanf den eingegebenen wert an die adresse der übergebenen variable. das lernst du irgendwann, wenn du zeiger an funktionen übergibst.

    wenn du ein array hast, wie z.b. char vorname[1024], und du dann einen string, bzw. mehrere buchstaben/zeichen gleichzeitig, einlesen willst, musst du scanf den parameter %s sowie die adresse des ersten elements des arrays übergeben, welche entweder vorname oder &vorname[0] lautet. auch das lernst du (hoffentlich) irgendwann, wenn du dich mit zeigern beschäftigen musst.

    faustregel: wenn eine funktion in ein array schreiben soll, übergibst du als parameter den namen des arrays, wenn die funktion in eine variable schreiben soll, übergibst du den namen der variable mit einem & davor.

    programmbeispiel:

    void FunktionMitArray(char array[])
    {
    array[0] = 'a';
    array[1] = 'b';
    array[2] = 'c';
    array[3] = 0;
    }
    
    void Funktion mit Variable(int *variable)
    {
    *variable = 1;
    }
    
    int main()
    {
    int variable;
    char array[4]; 
    
    FunktionMitArray(array); //array wird beschrieben, kein '&'
    FunktionMitVariable(&variable); //variable wird beschrieben, mit '&'
    
    return 0;
    }
    


  • @Wade1234 ja das mit variablen als int ist klar das weiß ich aber das mit dem array da verstehe was du mir sagen willst kann es aber noch nicht ganz begreifen sorry kannst du mir das anhand meines Beispiels mal zeigen. wie das im meinem Fall aussehen müsste damit ich die Namen der Spieler eingebe kann.

    dein Programmbeispiel verwirrt mich etwas weil du da ja nichts abfragst sondern nur mehrer char variablen deklarierst wenn ich das richtig deute



  • 🙄 also ein programm, das einen namen einliest und danach wieder ausgibt, könnte so aussehen:

    int main()
    {
              char name[100];
    
    
              printf("Bitte geben Sie Ihren Namen ein: ");
              scanf("%s\n", name); //kein '&' davor, weil ein array übergeben wird
              fflush(stdin); //dies ist nicht standardgemäß und funktioniert nur mit dem vcpp-compiler bzw. unter windows, hier wird der eingabepuffer geleert. 
              printf("Hallo %s\n", name); //auch hier kein '&' davor, wobei sich der aufruf von printf generell von dem aufruf von scanf unterscheidet.
    
    return 0;
    }
    

    merke dir einfach, dass du bei strings und arrays bei scanf kein & vor den variablennamen schreibst, und bei int, double usw. schon.



  • @Wade1234 das rollen der Augen war bis hier zu hören ^^ danke dir hab jetzt alles geändert die Bedingung der Schleife auf Spieler<3 gesetzt aber sobald ich dass bei Dev-c++ ausführe und die namen eingebe beendet er es immer noch er geht weiterhin nicht in die Schleife



  • @Ares Hast du auch neu compiliert und gelinkt.
    (passiert i. A. zusammen)

    oder anders gefragt: wurde eine neue .exe erstellt?



  • danke an Alle für eure Hilfe vor allem an Wade1234
    habs hinbekommen es lag am DEV-C++ habe das selbe Programm auf dem Visual++ laufen lassen dort funktioniert es musste noch ein paar Kleinigkeiten ändern wie das hochzählen aber jetzt läuft es einwandfrei .



  • also wie gesagt: du musst scanf("%s", spieler1) bzw. scanf("%s", spieler2) aufrugen und dann geht er bei mir schonmal in die schleife. das nächste problem ist dann schonmal, dass spieler1g+0; keine zuweisung ist und du spieler1g = spieler1g + 1; oder spieler1g++; oder spieler1g+=1;aufrufen musst. 🙄

    ansonsten funktioniert das glaube ich erstmal, visual studio (das gibt es auch umsonst!) schmeißt jedenfalls ohne ende warnungen raus und warnungen bedeuten immer "entweder, du weißt da ganz genau, was du machst (das bezweifle ich!!!einself), oder du hast auf lange sicht ein ernsthaftes problem".

    allerdings läuft das spiel weiter, solange einer der beiden spieler eine punktzahl von weniger als 3 hat, und nicht solange beide eine punktzahl von weniger als 3 haben.


Log in to reply