problem mit Unterprogramm readchar



  • Hallo!
    Ich soll folgendes Programm schreiben. Sowiet funktioniert es ja auch.
    Das einzige Problem, was ich habe ist, dass wenn ein ungültiges Zeichen eingelesen wird, die Schleife einmal extra durchlaufen wird, bisvor ich die eingabe wiederholen kann.

    /************************************************************************
    * 						                 
    * Name:          readchar	                            	        
    * Zweck:         Einlesen eines Zeichens mit 2 Antwortmoeglichkeiten    
    *                im jeweiligen char - Array stehen die zugelassenen     
    *	              Zeichen mit Fehlerbehandlung	                
    * Prototyp:      int readchar (const char msg[],const char ans1[],      
    *			        const char ans2[]);	                 
    * Paramet						        
    * msg:          (E) Zeichenkette mit der Aufforderungsmeldung.	        
    * ans1:         (A) Zeichenkette mit den zulaessigen Zeichen .	        
    *	           fuer Antwortmoeglichkeit 1                          
    * ans2:         (A) Zeichenkette mit den zulaessigen Zeichen.	        
    *		  fuer Antwortmoeglichkeit 2                          
    *							        
    * Funktionswert:  Eingelesener Wert   	                          
    *						                 
    ************************************************************************/
    
    #include <stdio.h>
    #include <string.h>
    int readchar (const char msg[], const char ans1[], const char ans2[])
    {
       int  readout, n, m, i, k;
       char zeichen;
    
       n = strlen(ans1);
       m = strlen(ans2);
       k = 0;
    
       do {
          printf("%s", msg);
          scanf ("%c", &zeichen);
    
             for (i = 0; i<n; ++i){
                if (zeichen == ans1[i]){
                   readout = 1;
                   k = 1;
                }
             }
             for (i = 0; i<m; ++i){
                if (k == 0)
                   if (zeichen == ans2[i]){
                      readout = 2;
                      k = 1;
                   }
              }
    
          if (k == 0){
             printf("Eingabefehler!\n");
          }
       } while (k != 1);
    
       return readout;
    }
    
    main()
    {
       int z;
    
       z = readchar("Bitte geben sie das Zeichen ein: ", "jJ", "nN");
       printf ("Das Zeichen lautet: %d", z);
       return 0;
    }
    

    Die Meldung bei einem unzulääsigen Zeichen sieht so aus:

    Bitte geben sie das Zeichen ein: Eingabefehler!
    Bitte geben sie das Zeichen ein:



  • vor der Eingabe mal einfach den Stream leeren da er gepuffert wird, ich glaub fflush() war das

    du gibst ja ein zeichen ein und dann return...das zeichen liest er return bleibt aber im puffer deshalb das verhalten fals ich das richtig intepretiere.

    übrigens, du bist im C#....c oder c++ wäre wohl besser



  • Danke!
    Hat funktioniert


Anmelden zum Antworten