Switch - Anweisung mit char

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • 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:

    Source Code

    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. }
    Display All


    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

    Source Code

    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. }
    Display All


    versuch das mal und berichte ;)
  • Aaah :D "fflush(stdin);
    Anfängerfehler. Hab ich total vergessen...

    Jetzt funktioniert es mit einem Buchstaben.


    Source Code

    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. }
    Display All


    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:

    Source Code

    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. }
    Display All

    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 ;(

    Source Code

    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):

    Source Code

    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.
    Display All


    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

    The post was edited 3 times, last by bcc-fan ().