char im switch Befehl



  • Ich habe bei bei dem zweiten Code ein getchar vergessen.Das läuft jetzt wenn ich nur einen Buchstaben verwende.
    Ziel wäre es halt mit einer Zeichenkette den switch befehl ausführen.

    by



  • Okay, jetzt sieht es so aus, als könnte es kompilieren. Wie kommst Du denn darauf, dass code == 'R' oder == 'T' sein sollte? Du willst doch nicht 'R' oder 'T' eingeben?
    Der switch, so wie Du ihn hast, reagiert jedenfalls nur auf 'R' und 'T' ...



  • switch mit einer Zeichenkette geht nicht. Im switch muss ein integraler Typ stehen.
    Im Text zu Deinen case-Fällen gibst Du doch aus, dass der eingegebene Code 8, bzw. 9 ist. Dann schreibe das doch auch in Deine Bedingungen:

    case 8: ...

    case 9: ...



  • Senzenberger schrieb:

    case 'RS':
    	
    	case 'TAB':
    

    Das funktioniert nicht:
    1. Mit switch lassen sich nur Werte vergleichen. Ein char ist nichts weiter als eine Zahl, aber das hier sind keine einzelnen Zahlen.

    2. Dinge wie 'RS' gibt es in C nicht. Zwischen zwei ' darf nur ein Zeichen stehen, z.B.: 'a'.
    Für mehrere Zeichen musst du " verwenden, z.B.: "RS"



  • Die Zeichencodes für Backspace und Tab sind übrigens '\b' bzw. '\t'.



  • Bashar schrieb:

    Die Zeichencodes für Backspace und Tab sind übrigens '\b' bzw. '\t'.

    Ja, aber man muss auch sagen, dass '\n' in Wirklichkeit nur ein Wert ist, das in C durch zwei Zeichen ('\' und 'n') ausgedrückt wird.
    Das Gleiche gilt auch für '\b' und '\t'.

    Übrigens würde ich nie diese Zeichen manuell prüfen, dafür gibts ctype.h und die Funktion iscntrl() .

    http://de.wikibooks.org/wiki/C-Programmierung:_ctype.h



  • Ich habe nicht gewusst das man bei switch keinen Zeichenketten verwenden kann.

    Könntest du mir noch erklären was du integraler Wert bedeutet?

    #include <stdio.h>
    
    main()
    {
    int zahl;
    printf("Bitte geben sie einen Code ein: ");
    scanf("%i",&zahl);
    getchar();
    
    printf("Der Eingegebene Code lautet: Code %i\n",zahl);
    
    switch (zahl)
    {
    	case 8:
    		printf("\nRueckschritt;Code 8");
    		break;
    
    	case 9:
    		printf("\nTabulator;Code 9");
    		break;
    
    	default:
    		printf("\Es wurde kein korrektes Zeichen eingegeben");
    		break;
    
    }
    getchar();
    }
    

    danke



  • Ich würde deinen Code so schreiben:

    #include <stdio.h>
    #include <ctype.h // für iscntrl()
    
    int main() // <-- hier muss int vor main stehen
    {
    int zahl;
    printf("Bitte geben sie einen Code ein: ");
    scanf("%i",&zahl);
    getchar(); // <-- welchen zweck erfüllt das?
    
    printf("Der Eingegebene Code lautet: Code %i\n",zahl);
    
    if(iscntrl(zahl))
    {
        printf("Control-char;Code %d\n",zahl);
    } else
    {
        printf("Es wurde kein korrektes Zeichen eingegeben\n")M
    }
    
    getchar(); // <-- welchen zweck erfüllt das?
    }
    


  • Sorry, ein kleiner Tippfehler, hier der richtige code:

    #include <stdio.h>
    #include <ctype.h> // für iscntrl()
    
    int main() // <-- hier muss int vor main stehen
    {
    int zahl;
    printf("Bitte geben sie einen Code ein: ");
    scanf("%i",&zahl);
    getchar(); // <-- welchen zweck erfüllt das?
    
    printf("Der Eingegebene Code lautet: Code %i\n",zahl);
    
    if(iscntrl(zahl))
    {
        printf("Control-char;Code %d\n",zahl);
    } else
    {
        printf("Es wurde kein korrektes Zeichen eingegeben\n")M
    }
    
    getchar(); // <-- welchen zweck erfüllt das?
    }
    


  • Sorry, NOCH ein Tippfehler.

    #include <stdio.h>
    #include <ctype.h // für iscntrl()
    
    int main() // <-- hier muss int vor main stehen
    {
    int zahl;
    printf("Bitte geben sie einen Code ein: ");
    scanf("%i",&zahl);
    getchar(); // <-- welchen zweck erfüllt das?
    
    printf("Der Eingegebene Code lautet: Code %i\n",zahl);
    
    if(iscntrl(zahl))
    {
        printf("Control-char;Code %d\n",zahl);
    } else
    {
        printf("Es wurde kein korrektes Zeichen eingegeben\n");
    }
    
    getchar(); // <-- welchen zweck erfüllt das?
    }
    


  • Senzenberger schrieb:

    Könntest du mir noch erklären was du integraler Wert bedeutet?

    Ganzzahliger Typ.
    In C ist ein char auch nur ein ganzzahliger Typ mit einem kleinen Wertebereich.

    #include <stdio.h>
    
    int main(void)
    {
    int zahl;
    printf("Bitte geben sie einen Code ein: ");
    scanf("%i",&zahl);
    
    printf("Der Eingegebene Code lautet: Code %i\n",zahl);
    
    switch (zahl)
    {
    	case '\b':
    		printf("\nRueckschritt;");
    		break;
    
    	case "\t':
    		printf("\nTabulator;");
    		break;
    
    	default:
    		printf("\Es wurde kein korrektes Zeichen eingegeben");
    		break;
    
    }
    getchar();
    }
    


  • schrieb:

    '\b', '\t'

    Übrigens würde ich nie diese Zeichen manuell prüfen, dafür gibts ctype.h und die Funktion iscntrl() .

    Die sagt dir nicht, welches Zeichen es ist.



  • Tippfehler 🙄

    case '\t':
    


  • DirkB schrieb:

    Tippfehler 🙄

    case '\t':
    

    Passiert mich wie man sieht auch oft. Es liegt daran, dass diese puristische und schmucklose (ich will nicht sagen "potthässliche") Textbox kein live-Syntax-Highlighting unterstützt und so Fehler erst nach dem abschicken auffallen.

    Vielleicht sollte man hier mal drüber nachdenken, nach über 10 Jahren (ich nehme jetzt mal an, dass die Forensoftware in der Zeit seit der Entstehung dieses Forums die gleiche geblieben ist) mal eine neue Forensoftware zu verwenden.

    Solche Forensoftware gibts für wenig Geld, und manche sind, soweit ich weiß, sogar open source.



    1. Mitglieder dürfen ihre Postings editieren.
    2. Mitglieder und Nichtmitglieder dürfen die Vorschau-Funktion benutzen.

    Rummaulen ist natürlich auch eine Option 😉



  • DirkB schrieb:

    [...] 
    
    switch (zahl) 
    {
      case '\b': printf("\nRueckschritt;");
                 break;
    
      case '\t': printf("\nTabulator;");
                 break; [...] }
    

    So ist es natürlich schöner als auf 8 oder 9 abzufragen, weil man so als Leser sieht, was eigentlich abgefragt werden soll, während die Abfrage auf 8 oder 9 (magic numbers) dem Unwissenden erst mal nichts sagt ...



  • und es funktioniert auch bei Systemen, die nicht auf ASCII basieren.



  • soll man nach nem \t oder \r die enter-taste drücken?
    wie doof ist das denn? 😃


Anmelden zum Antworten