Bitte um Hilfe bei Ein-/Ausgabeprogramm



  • Hallo!
    Ich benötige bitte noch einmal eure Hilfe.
    Hier die Aufgabenstellung:
    http://www.abload.de/image.php?img=aufgabem362.jpg

    "Lösungsansatz:"

    #include<stdio.h>
    int main (void)
    {
    int zahl;
    char text1;
    printf("Bitte geben Sie eine Zahl zwischen 1 und 9 ein!");
    scanf("%d",&zahl);
    
    switch (zahl)
    {
    case '1':text=eins;
    case '2':text=zwei;
    case '3':text=drei;
    case '4':text=vier;
    case '5':text=fuenf;
    case '6':text=sechs;
    case '7':text=sieben;
    case '8':text=acht;
    case '9':text=neun;
    default: goto fehler;
    }
    
    printf("Die eingegebene Zahl ist %d\n",text1);
    fehler: printf("Sie haben keine Zahl zwischen 1 und 9 eingegeben.");
    return 0;
    }
    

    Sieht jemand, wo der/die Fehler liegen?
    Vielen Dank und Gruß
    knacksen 🙂



  • Würdest du vielleicht verraten, welches Fehlverhalten auftritt? 🙄

    Grundsätzlich:

    1. goto ist meistens böse und kann in deinem Fall locker vermieden werden

    2. Wenn du dein switch auf zahl ausführst, dann vergleiche mit 1, 2, 3 usw., nicht mit '1', '2', '3'...

    Und was ist "eins"?? Das ist keine Variable, die hier irgendwo deklariert wird!

    Zieh dir mal ein Grundlagen-Tutorial 'rein, dann wird dir einiges klar...



  • Du bist in der Falschen Welt.



  • Noch ein Hinweis:

    Ein paar vereinzelt auftretende break-Anweisungen würden
    dem Programm auch ganz gut anstehen! 😃



  • Zuerst einmal: Du benutzt einen "char" um eine Zeichenfolge zu speichern - der Char fasst leider nur 1 Byte.
    Dazu kommt noch, dass deine char-Variable "text1" heißt, bei der Zuordnung im Switch wird sie nur "text" genannt.
    Von einem "goto" habe ich ehrlich gesagt noch nie gehört, warum hängst du den gewünschten Befehl nicht einfach mit in den Switch? Also z.B. so (ich kenne Switches nicht so genau):

    #include<stdio.h>
    
    int main ()
    {
    int zahl;
    printf("Bitte geben Sie eine Zahl zwischen 1 und 9 ein!");
    scanf("%d",&zahl);
    
    switch (zahl)
    {
    case 1:printf("Die eingegebene Zahl ist Eins.");
    	break;
    case 2:printf("Die eingegebene Zahl ist Zwei.");
    	break;
    case 3:printf("Die eingegebene Zahl ist Drei.");
    	break;
    case 4:printf("Die eingegebene Zahl ist Vier.");
    	break;
    case 5:printf("Die eingegebene Zahl ist Fünf.");
    	break;
    case 6:printf("Die eingegebene Zahl ist Sechs.");
    	break;
    case 7:printf("Die eingegebene Zahl ist Sieben.");
    	break;
    case 8:printf("Die eingegebene Zahl ist Acht.");
    	break;
    case 9:printf("Die eingegebene Zahl ist Neun.");
    	break;
    default: printf("Sie haben keine Zahl zwischen 1 und 9 eingegeben.");
    	break;
    }
    
    return 0;
    }
    

    So würde es laufen. Willst du wirklich einen C-String nutzen, wird das ganze vielleicht ein bisschen hässlich.

    Zu guter Letzt: Bei einem so simplen Programm so viele Fehler zu machen, deutet wirklich darauf hin, dass du dich mal ein wenig mit der Materie vertraut machen solltest ;). Das soll übrigens nicht heißen, dass meine Lösung schön sei - aber zumindest läuft sie.



  • Stiefel2000 schrieb:

    Von einem "goto" habe ich ehrlich gesagt noch nie gehört

    Doch, das gibt es. Trotzdem sollte man goto - wenn überhaupt - nur in ganz seltenen Fällen verwenden.

    Stiefel2000 schrieb:

    Willst du wirklich einen C-String nutzen, wird das ganze vielleicht ein bisschen hässlich.

    Warum? Das ist C, da gibt's nunmal keinen std::string, also sind C-Strings auch nicht hässlich. In deiner Variante schreibst du x mal 'printf("Die eingegebene Zahl ist[...]'. Diese Redundanz könnte man sich ersparen, indem man in einen String füllt und ein printf unter das switch setzt.



  • Ich bin noch in der Phase, wo ich ein Programm mit allen Mitteln fertig stellen will - ohne große Rücksicht auf Kürze oder Schönheit ;). Sofern eine Lösung erstmal funktioniert, bin ich einigermaßen zufrieden - dass mein Programmvorschlag weiter oben ziemlich unschön ist, sehe ich natürlich ein :).



  • Stiefel2000 schrieb:

    dass mein Programmvorschlag weiter oben ziemlich unschön ist, sehe ich natürlich ein :).

    Aber er funktioniert wenigstens! 😉



  • Am schnellsten scheint mir folgendes zu sein:

    #include<stdio.h>
    
    int main ()
    {
      const char *num_tables[] = { "ungültige Eingabe", "null", "eins", 
                                   "zwei", "drei", "vier", "fünf", "sechs", 
                                   "sieben", "acht", "neun" };
      unsigned int zahl;
      printf("Bitte geben Sie eine Zahl zwischen 1 und 9 ein!");
      scanf("%d",&zahl);
      printf("Eingabe: %s\n", zahl < 10 ? num_tables[zahl + 1] : num_tables[0]);
      return 0;
    }
    

    Ich bin nicht so ein Freund vom redundanten Code.


Log in to reply