getchar() - Newline Zeichen entfernen



  • Hallo alle zusammen,

    ich hab jetzt fast schon das ganze Forum durchgelesen zu meinem Problem, aber alle Lösungen die ich eingegeben habe, führten nicht zum Erfolg.

    Folgendes Problem:

    Ich möchte eine Bestätigung vom User ob er Abbrechen will oder nicht. Dementsprechend möchte ich dies mit einem Zeichen steuern. Jetzt hab ich aber das Pufferproblem mit der Escape-Sequenz "\n".

    Zum Verständnis hier noch mein Code:

    //Warten bis Nutzer weiter bestätigt !
      char weiter;
      printf("\nVerzeichnis erstellt ! (W)eiter / (E)nde ! ");
      scanf("%c\n", &weiter);
      toupper(weiter); 
      //Aufruf Programm 
      do      
      switch (weiter)
      {
        case 'W':
          ShellExecute(0,cAction,cFile,"","",1);
          break;
        case 'E':
          printf("\ntest");
          break;
        default:
           printf("\nFalsche Eingabe, bitte wiederholen!");
        }
        while(weiter == 'E' || 'W');     
      system("PAUSE");
    

    Ich hab auch fflush(stdin) probiert und auch while(getchar() != '\n') usw aber alles half nichts.

    Vielleicht kann mir ja von euch einer helfen, damit ich nicht immer eine Endlosschleife bekomme.

    Gruß und Danke
    Al



  • hmmm...

    ich würde statt dem

    scanf("%c\n".....);
    

    // in einer Eingabe sollte eigendlich nicht \n stehen
    einfach

    weiter=getche();
    

    schreiben.



  • pack mal ein fflush(stdin) in deine schleife...



  • while(weiter == 'E' || 'W');
    

    Ist murks. Muss heißen

    while(weiter == 'E' || weiter == 'W');
    

    Dann verschiebst du noch das do vor die Eingabe, die sonst nicht wiederhohlt
    werden kann. Und Windalfs fflush(stdin); packst du hinter das scanf(..),
    damit wird der Tastaturpuffer gelöscht. (Ist nicht stielvoll, klappt aber)



  • hi leute

    ich mein, ich hab ja eigentlich keine ahnung wie das fflush() funktioniert, aber in der faq lese ich:

    Daraus folgt, das fflush(stdin) ein undefiniertes verhalten an den tag legt.

    wie jetzt?

    sebastian



  • Hallo alle zusammen,

    erst einmal riesigen Dank für eure schnellen Antworten.
    Mit folgendem Code hats jetzt so halbwegs geklappt:

    //Warten bis Nutzer weiter bestätigt !
      char weiter;
      printf("\nVerzeichnis erstellt ! (W)eiter / (E)nde ! ");
      do{
      scanf("%c", &weiter);
      int toupper(weiter); 
      fflush(stdin);
      //Aufruf Programm       
      switch (weiter)
      {
        case 'W':
          ShellExecute(0,cAction,cFile,"","",1);
          break;
        case 'E':
          printf("\ntest");
          break;
        default:
           printf("\nFalsche Eingabe, bitte wiederholen! ");
        }
        }       
        while((weiter == 'E') || (weiter = 'W'));     
      system("PAUSE");
    

    Jetzt hab ich nur noch das Problem, das er die Wandlung von Kleinbuchstaben in Großbuchstaben mit der Funktion toupper(weiter) nicht macht.
    Ich kann mir nicht erklären warum. Habt ihr vielleicht eine Idee?

    Gruß und nochmals danke.
    Al



  • weiter=toupper(weiter);
    


  • Windalf schrieb:

    weiter=toupper(weiter);
    

    und nicht

    int toupper(weiter);



  • fflush(stdin) raus, system("PAUSE") raus(!) und das \n beim scanf() wieder rein. Anstatt system("PAUSE") einfach irgendeine Eingabe machen. In der Konsolen-FAQ gibts dafür Alternativen: http://www.c-plusplus.net/forum/viewtopic.php?t=39328


Anmelden zum Antworten