Schleife bei Zahlenspiel



  • Hab hier mal meinen Quelltext oder wie das auch immer bei c heißt und wollte nun wissen, wie ich das mache, wenn einer die zahl falsch hat das er es nochmal versuchen kann ohne das prog neu zu starten...(THX SCHONMAL IM VORRAUS):

    #include <conio.h>
    #include <stdio.h>

    #include <dos.h>

    void mywait (int);

    void mywait (int d)
    {
    struct time t, tneu;
    int loop;

    for (loop=0; loop<d; loop++)
    {
    gettime(&t);
    gettime(&tneu);
    while (t.ti_hund == tneu.ti_hund) gettime(&tneu);
    }
    }

    void main ()
    {
    int zahl = 1;
    int x;
    int b;

    printf("Welche Zahl willst du fangen? Wähle zwischen 1 und 30 : ");
    scanf("%i",&x);
    if (x<=30)
    {
    if (x>=1)
    {
    printf("\nFangen mit jeder Taste!\n\n");
    printf("Welchen Schwierigkeitsgrad möchtest du spielen?\n(1) Langsam\n(2) Normal\n(3) Schnell\n(4) Sehr Schnell\nSchwierigkeitsstuffe: ");
    scanf("%i",&b);

    if (b==1)
    {
    do
    {

    if (zahl>30)
    {
    zahl=1;
    }
    gotoxy(10,15);
    printf(" %i \n",zahl);
    mywait(8);
    zahl = zahl + 1;;
    }
    while (!kbhit());
    if (zahl-1==x)
    {
    printf("Du hast es geschafft, SUPER!!!");
    }
    else
    {
    printf("Leider hats nicht geklappt, versuchs nochmal!");
    }
    }
    if (b==2)
    {
    do
    {

    if (zahl>30)
    {
    zahl=1;
    }
    gotoxy(10,15);
    printf(" %i \n",zahl);
    mywait(3);
    zahl = zahl + 1;;
    }
    while (!kbhit());
    if (zahl-1==x)
    {
    printf("Du hast es geschafft, SUPER!!!");
    }
    else
    {
    printf("Leider hats nicht geklappt, versuchs nochmal!");
    }
    }
    if (b==3)
    {
    do
    {

    if (zahl>30)
    {
    zahl=1;
    }
    gotoxy(10,15);
    printf(" %i \n",zahl);
    mywait(1);
    zahl = zahl + 1;;
    }
    while (!kbhit());
    if (zahl-1==x)
    {
    printf("Du hast es geschafft, SUPER!!!");
    }
    else
    {
    printf("Leider hats nicht geklappt, versuchs nochmal!");
    }
    }
    if (b==4)
    {
    do
    {

    if (zahl>30)
    {
    zahl=1;
    }
    gotoxy(10,15);
    printf(" %i \n",zahl);
    mywait(0.75);
    zahl = zahl + 1;;
    }
    while (!kbhit());
    if (zahl-1==x)
    {
    printf("Du hast es geschafft, SUPER!!!");
    }
    else
    {
    printf("Leider hats nicht geklappt, versuchs nochmal!");
    }
    }
    if (b>4)
    {
    printf("ERROR");
    }
    if (b<1)
    {
    printf("ERROR");
    }
    }
    if (x<1)
    {
    printf("ERROR");
    }
    }
    if (x>30)
    {
    printf("ERROR");
    }
    }



  • also ich mach sowas immer mit nem goto und damit einfach wieder zum anfang springen.

    aber villeicht haben unsere profis hier ne noch elegantere lösung?



  • und wo müsste ich das goto dann einfügen?



  • also würde einfach eins vor dem printf("Mit welcher Zahl..... machen.

    also vorm printf, z.B.: "again:"
    und anschließend eine frage nachdem man verloren/gewonnen hat ob man nochmal will, wenn ja dan schreibt man einfach zb. "goto again;" und er springt wieder hinauf zum "again".



  • is ja übelst redundant was du da machst...
    bis auf die tatsache bei mywait unterscheiden die fälle sich ja nicht... und dann fragst du die fehler auch erst mittendrin ab... am besten schon chekcen bevor du das anschmeisst und notfalls die gültigkeitsvariablen schon vorher auf brauchbare werte setzen...

    dein b-teil kannst du dann entweder mit ner switchorgie lösen oder z.b. so

    int mywaitarray[] ={8.0,3.0,1.0,0.75}; 
    
    //if(b==   das auch schon vorher abchecken ob b zwischen 1 und 4 ist...
    //if (zahl>30)zahl=1; sowas schon vorher checken nicht erst mitten drin// 
    
    //aufi
    while (!kbhit()){ 
      gotoxy(10,15); 
      printf(" %i \n",zahl); 
      mywait(mywaitarray[b]); 
      ++zahl; 
      if(zahl-1==x)
        printf("Du hast es geschafft, SUPER!!!"); 
      else 
       printf("Leider hats nicht geklappt, versuchs nochmal!"); 
    }
    .
    .
    .
    

    zum mehrfacheinlesen falss falscheingaben verwendet wurden einfach ne schleife drum packen...



  • IceFire schrieb:

    also ich mach sowas immer mit nem goto und damit einfach wieder zum anfang springen.

    aber villeicht haben unsere profis hier ne noch elegantere lösung?

    Nur Noobs benutzen goto!



  • WissensPool schrieb:

    Nur Noobs benutzen goto!

    Nur engstirnige Besserwisser machen Pauschalaussagen!



  • Es heisst auch int main



  • bitte, was iss den "goto" ?????? 🤡 🤡 🤡


Log in to reply