Zeichen (%c) einlesen in switch/case Auswahl.



  • Ein neuer Tag, ein neues Problem. By the way, noch mal vielen Dank für die Lösung des Problems. DIe letzte Lösung gefällt mir am besten. Das Gesetz habe ich mir angesehen. Damit es in Fleich und Blut übergeht ist aber wohl noch ein bisschen Praxis notwendig.

    Heute frage ich mich, warum es in einer switch/case Abfrage möglich ist, eine Zahl einzulesen, jedoch nicht ein Zeichen einzulesen. Geschweige denn selbiges aus zu geben. Der Teil wo das Zeichen eingelesen werden soll wird schlicht übersprungen. An der Stelle wo das Zeichen ausgegeben werden soll (das nicht eingelesen wurde) bricht der Text wie bei \n um.
    Ich habe das ganze auch mit "variable=getchar();" ausprobiert. Klappt leider auch nicht.

    Freue mich auf Antworten.
    Gruß, Philippp

    #include <stdio.h>
    
    int main()
    {
      char a;
      int b, c;
      printf("Bitte geben Sie eine 1, oder eine 2 ein.\n");
      scanf("%i",&b);
      switch(b)
      {
        case 1:
             printf("Sie haben 1 gewahlt. \nBitte geben Sie eine Zahl ein. \n");
             scanf("%i",&c);
             printf("\nSie haben %i eingegeben\n",c);
             break;
    
        case 2:
             printf("Sie haben 2 eingegeben. \nBitte geben Sie einen Buchstaben ein. \n");
             scanf("%c",&a); /*wird übersprungen*/
             printf("\nSie haben %c eingegeben\n",a); /*Umbruch an der Stelle %c */
             break;
    
       default:
             printf("Wert ungleich 1 oder 2");
             break;
      }
    
      system("PAUSE");	
      return 0;
    }
    


  • Hallo,
    wenn Du nach deinem ersten scanf (Zeile 😎 den Eingabepuffer löschst, sollte es gehen.

    printf("Bitte geben Sie eine 1, oder eine 2 ein.\n");
    scanf("%i",&b);
    fflush(stdin);
    


  • Stimmt. Das löst das Problem. Allerdings irgendwie unbefriedigend. Ist das ein Fehler von C?
    Gruß, Philippp



  • fflush(stdin) 😮 😮 😮 meine Auge, jetzt bekomme ich 100% Augenkrebs deswegen 😡

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html



  • Blöd gefragt:
    Also statt..

    char variable;
    scanf("%c",&variable);
    

    Nur noch

    int variable;
    while ((variable = getchar()) != EOF && variable != '\n'); /*etwas umständlich...*/
    

    ... Ich wüsste nicht das man Zeichen als Zahl eingeben kann (man kann es sicherlich umwandeln -> ASCII Tabelle). Aber wenn ich ein 'j' erwarte bereite ich mich mit besten Wissen und Gewissen auch auf ein 'j' vor, in dem ich dafür eine char Variable anlege und das 'j' mit %c aufrufe bzw. speichere. ...
    Hab ich zumindest so gelesen und gelernt...
    Hinzu kommt die Frage, wann ich beschriebenes einsetzte. Gibt es eine art Faustregel?
    Gruß, Philippp



  • Hier mal eine Demo mit Buchstaben:

    #include <stdio.h>
    
    int Menu()
    {
    	int dec;
    
    	printf(" Starten : --> s \n Optionen: --> o \n Ende....: --> q \n");
    	scanf("%s", &dec);
            printf("Eingabe=%s\n",&dec);
    	return(dec);
    }
    
    void Starten()
    {
    	printf("starten\n");
    }
    
    void Optionen()
    {
    	printf("optionen\n");
    }
    
    int main()
    {
    	char mc;
    	int q = 0;	// 0 must be set!
    
    	printf("\t\t scanf - Demo \n\n");
    
        do
        {
    	mc = Menu();
    
            switch (mc)
            {
            case 's':
                Starten();
                break;
            case 'o':
                Optionen();
                break;
            case 'q':
                q = 1;
                break;
    
            default:
            printf("\nSie haben bei der Eingabe einen Fehler gemacht.\nBitte Entscheiden Sie sich jetzt fuer s, o oder q");
    
            }
        }while(!q);
    
      return 0;
    }
    

    Da ist noch eine Kleinigkeit die mir nicht gefällt -
    aber testet mal.

    MfG f.-th.



  • Aber trau Dich bloss nicht, mehr als ein Zeichen einzugeben 😉

    ...
       int dec;
    
       printf(" Starten : --> s \n Optionen: --> o \n Ende....: --> q \n");
       scanf("%s", &dec);
            printf("Eingabe=%s\n",&dec);
      ...
    

    Da wird über ein scanf(..) ein String an die Adresse einer integer Variablen eingelesen. Das ist nicht gut.


Anmelden zum Antworten