Tastatur ausstellen // if-Anweisung



  • printf("\n\n%i. von 10 Versuchen", versuche);
    
    printf("\nBitte eine Zahl eingeben: ");
    
    printf("\n\nSchade, denn sie lautet: %i",zufallszahl);
    

    Ich verstehe das mit dem Tastaturpuffer noch nicht. Wenn dort "\n" steht, soll er in die nächste Zeile gehen, wegen der Optik..macht er ja auch, warum nimmt das Programm denn diesen Wert?



  • Der Tastaturpuffer hat mit den printf() nichts zu tun (dort steht \n für ein newline = Zeilenwechsel) - da geht es um deine Eingaben (scanf()).

    PS: Irgendwo in der FAQ findet sich auch ein Beitrag, wie du den Puffer entleeren kannst.

    PPS: Sicher gibt es Möglichkeiten, die Tastatur teilweise abzuschalten. Aber dazu müsstest du extrem tief ins System eingreifen.



  • vielen dank, es läuft alles wunderbar..und jetz ein betriebssystem 🕶



  • hi 😉
    hab ein neues Problem.
    Ich kann das umgemodelte Programm nicht ausführen und ich weiß nicht woran es liegt. Die Fehlermeldung hilft mir nicht all zu viel weiter.

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    int vergleich();
    int rat();
    int zahlenbereich();
    
    int rat()
     {
    
        printf("\n\nErraten Sie die Zahl zwischen 1 und 100");
        vergleich();
        printf("\nSpiel vorbei");
    
     }
    
    int zahlenbereich()
     {
        int start, ende;
        int differenz;                  
     do
     {
    
        printf("\nStart und Endpunkt müssen mindestens eine Differenz von 10 aufweisen!");
        printf("\nGeben Sie einen Startpunkt ein: ");
        scanf("%i", &start);
        printf("\nGeben Sie einen Endpunkt ein: ");
        scanf("%i", &ende);
        printf("Start %i, Ende %i", start, ende);
        differenz = ende - start;
     }
     while(differenz < '10'); 
     vergleich();
     }
    
     int vergleich ()
    {
        int zufallszahl;
        int ratezahl=0;
        int versuche=1;         
        int start, ende;
    //Erstellen einer Zufallszahl
       srand(start);
       zufallszahl=rand()%ende+1;
    
      do
        {
         printf("\n\n%i. von 10 Versuchen", versuche);
         printf("\nBitte eine Zahl eingeben: ");
         scanf("%i", &ratezahl);
    
         if (zufallszahl < ratezahl)
          {
                    printf("Die gesuchte Zahl ist kleiner");             
                        versuche++;
          }
            else if (zufallszahl > ratezahl)
          {
                    printf("Die gesuchte Zahl ist groesser");
                        versuche++;
    
          }      
    
            else if  (zufallszahl = ratezahl)
          {
                    printf("RICHTIG");
    
          }
    
        fflush(stdin);
       }
        while(versuche < 11 && zufallszahl!=ratezahl);
        if (ratezahl != zufallszahl)
         {
                      printf("\n\nSchade, denn sie lautet: %i",zufallszahl);
         }
    
    }
    
    int main()
    
    {
    
    //ZAHLEN RATEN
    
       char wahl;
    
       printf("Zahlen raten");
       printf("\n===========");
    
     do      
     {
       fflush(stdin);
       rat();
       printf("\nNochmal? J/N: ");
       scanf("%c", &wahl);
     }
        while (wahl == 'j' || wahl== 'J');    
         system("PAUSE");
    
    }
    

    [Warning] multi-character character constant
    In function Z3ratv': [Linker error] undefined reference tovergleich()'
    In function Z13zahlenbereichv': [Linker error] undefined reference tovergleich()'
    ld returned 1 exit status

    kann mir bitte einer sagen, was ich ändern muss?
    danke euch



  • alles klar, hab den fehler, jetzt stürzt das programm nur noch ab^^



  • die zufallszahl liegt nicht zwischen dem vom anwender festgelegten bereich, liegt das am mudolo? ich weiß echt nich weiter

    do
     {
    
        printf("\nStart und Endpunkt muessen mindestens eine Differenz von 10 aufweisen!");
        printf("\nGeben Sie einen Startpunkt ein: ");
        scanf("%i", &start);
        printf("\nGeben Sie einen Endpunkt ein: ");
        scanf("%i", &ende);
        differenz = ende - start;
     }
     while(differenz < 10); 
    
    //Erstellen einer Zufallszahl
       srand(start);
       zufallszahl=rand()%ende+1;
    


  • Erstens solltest du srand() nur einmal am Anfang aufrufen (und dann normalerweise nicht mit einem festen Wert). und zweitens liefert "rand()%x" einen Wert im Bereich 0..x-1 - da mußt du die richtigen Grenzwerte einsetzen:

    zahl=rand()%(ende-start+1)+start;
    


  • genial, es geht
    aber könntest du es mir eventuell noch erklären?



  • rand() liefert eine Zufallszahl im Bereich 0 bis RAND_MAX (das ist eine Konstante im sehr hohen int-Bereich, die vom System vorgegeben wird), mit dem Modulo wird das auf den Bereich 0 bis n-1 beschränkt - und anschließend in die richtige Position angehoben:

    rand()            0..RAND_MAX
    rand()%(e-s+1)    0..(e-s)
    rand()%(e-s+1)+s  s..e
    


  • alles klar, danke


Anmelden zum Antworten