Switch - Anweisung mit char

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Switch - Anweisung mit char

    Hallo :)
    Ich hätte da ein Problem und zwar möchte ich mit einer switchanweisung ein chararray abfragen. Mit Zahlen ist das ja kein Problem.
    Mein Code sieht so aus:

    Quellcode

    1. ]#include "stdafx.h"
    2. #include <stdio.h>
    3. #include <string.h>
    4. #include <string>
    5. #include <stdlib.h>
    6. int _tmain(int argc, _TCHAR* argv[])
    7. {
    8. char eingabe[2];
    9. int i;
    10. scanf_s("%s", &eingabe);
    11. switch (eingabe[2]) {
    12. case 'l':
    13. scanf("%d", &i);
    14. printf("%d\n", i);
    15. break;
    16. case 'M':
    17. printf("HALLLLO");
    18. break;
    19. }
    20. return 0;
    21. }
    Alles anzeigen


    Ganz banal gehalten, möchte das aber in einem anderen Programm verwenden.

    Programm läuft, aber wenn ich jetzt "l" eingebe, beendet sich das Programm einfach anstatt das zumachen was nach der case anweisung steht...

    Wo ist das Problem?

    Danke im Vorraus! :)
  • Hab jetzt keinen Microsoft-Compiler am Start -
    der Quelltext nutzt Besonderheiten dieses Compilers

    Quellcode

    1. #include "stdafx.h"
    2. #include <stdio.h>
    3. #include <string.h>
    4. // wenn du in C schreibst, dann nix #include <string>
    5. #include <stdlib.h>
    6. int _tmain(int argc, _TCHAR* argv[])
    7. {
    8. char eingabe;
    9. int i;
    10. scanf_s("%s", &eingabe);
    11. switch (eingabe) {
    12. case 'l':
    13. scanf("%d", &i); // möchtest du hier nicht auch scanf_s() nutzen soll zuverlässiger sein - scanf() versagt manchmal
    14. printf("%d\n", i);
    15. break;
    16. case 'M':
    17. printf("HALLLLO");
    18. break;
    19. }
    20. return 0;
    21. }
    Alles anzeigen


    versuch das mal und berichte ;)
  • Okay ich hab jetzt nicht deinen Compiler -
    Führst du das Programm auf Console aus?
    Sollte einmal in deiner IDE einzustellen gehen oder
    unter Windows direkt, ist da ein wenig von der Version abhängig.
    Hier ein Link: carpelibrum.de/tutorials/windows_konsole.pdf

    hast du Zeile 17 wie von mir kommentiert geändert?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan ()

  • Aaah :D "fflush(stdin);
    Anfängerfehler. Hab ich total vergessen...

    Jetzt funktioniert es mit einem Buchstaben.


    Quellcode

    1. #include "stdafx.h"
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. int _tmain(int argc, _TCHAR* argv[])
    5. {
    6. char i;
    7. scanf_s("%c",&i);
    8. fflush(stdin);
    9. switch (i) {
    10. case 'l':
    11. printf("HallO\n");
    12. break;
    13. case 'M':
    14. printf("HALLLLO\n");
    15. break;
    16. }
    17. return 0;
    18. }
    Alles anzeigen


    So sieht das dann aus. :) Vielen Dank. :) Weißt du auch noch wie man jetzt eine Zeichenkette einbindet? Wäre cool :)
  • Ach ja, ich bin kein Schweizer, mir fiel halt nichts besseres ein.
    Des Rätsels Lösung kann so einfach sein, man muss nur wissen, wie man es lösen kann, des Rätsels lösung ist:

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main()
    4. {
    5. char i[20];
    6. scanf("%s", i);
    7. switch (i[0])
    8. {
    9. case 'R':
    10. switch(i[1])
    11. {
    12. case 'i':
    13. switch(i[2])
    14. {
    15. case 'c':
    16. switch(i[3])
    17. {
    18. case 'o':
    19. switch(i[4])
    20. {
    21. case 'l':
    22. switch(i[5])
    23. {
    24. case 'a':
    25. printf("Wer hat's Erfunden?\nRicola\n");
    26. }
    27. }
    28. }
    29. }
    30. }
    31. }
    32. return 0;
    33. }
    Alles anzeigen

    Vielleicht können die erfahrenen noch etwas daran verbessern, ich bin auf jedenfall zufrieden damit...
    Kompiliert habe ich mit gcc 4.5.0 unter Linux, weiß nicht ob es mit anderen Kompilern klappt...
    Du bist Terrorist, warum? Siehe hier
  • Das hab ich nun von meinem Tipp mit der Suchmaschine ;(

    Quellcode

    1. fflush(stdin);


    gehört nicht zu Ansi C, C89, C90, C95 oder C99 -> bei denen steht extra dabei das man das nicht verwenden soll, da es nicht zuverlässig zu Ergebnissen führen kann :!: :!: :!:

    Das ist meiner Kenntnis in der Dokumentation von Microsoft als Erweiterung von C deklariert, sollte aber, wenn ihr dort "strikt C" oder ähnliches in der IDE einstellt nicht sauber arbeiten.

    Das ist ja das Blöde an "scanf()" jeder Compiler hat das ein wenig anders implementiert - das kann sogar soweit gehen, das bei einem Compiler es hin und wieder funktioniert, bei anderen meistens und bei wieder einem anderen gar nicht.

    Nachtrag Zitat aus C-Normenausschuss zu fflush(stdin):

    Quellcode

    1. 7.19.5.2 The fflush function
    2. Synopsis
    3. #include <stdio.h>
    4. int fflush(FILE *stream);
    5. Description
    6. If stream points to an output stream or an update stream in which the most recent
    7. operation was not input, the fflush function causes any unwritten data for that stream
    8. to be delivered to the host environment to be written to the file; otherwise, the behavior is
    9. undefined.
    10. If stream is a null pointer, the fflush function performs this flushing action on all
    11. streams for which the behavior is defined above.
    12. Returns
    13. The fflush function sets the error indicator for the stream and returns EOF if a write
    14. error occurs, otherwise it returns zero.
    Alles anzeigen


    Aber selbst Microsoft empfiehlt in der MSDN statt scanf die neueren Funktionen zu nutzen, die Microsoft seinen Compilern hinzu gefügt hat, die aber von den meisten anderen Compilern nicht verstanden werden.

    MfG bcc-fan

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von bcc-fan ()