C - Klausuraufgabe - Brauche eure Hilfe



  • Oh shit, nicht drauf geachtet...



  • _Falkes Code kann man aber ganz leicht so abändern, dass er ohne if-Abfrage immer funktioniert.



  • wxSkip schrieb:

    _Falkes Code kann man aber ganz leicht so abändern, dass er ohne if-Abfrage immer funktioniert.

    Ja, und das mach' ich auch mal schnell.

    #include <stdio.h>
    int main(void)
    {
      int eingabe;
      const char* def = "";
      const char* nr;
    
      scanf("%d", &eingabe);
      switch(eingabe)
      {
        case 5: nr="Fuenf"; break;
        case 6: nr="Sechs"; break;
        case 7: nr="Sieben"; break;
        case 8: nr="Acht"; break;
        case 9: nr="Neun"; break;
        default: nr = def; break;
      }
      puts(nr);
    
      return 0;
    }
    


  • --jr-- schrieb:

    Aber die Aufgabe soll doch ohne If oder If else geloest werden...

    Das habe ich überlesen sry.



  • scanf("%d", &eingabe);
    
    gefordert war: welches ein Zeichen von der Tastatur einliest.
    

    Kann schon keine volle Punktzahl mehr geben.



  • dabei hat wutz vollkommen recht...

    int main(){
    
      char eingabe;
      const char* zahl;
    
      printf("Geben sie eine Zahl zwischen 1 und 5 ein!\n");
      scanf("%c", &eingabe);
    
      eingabe-=48; // 1 = 49, 2 = 50, 3 = 51 etc. wenn man davon jetzt 48 abzieht, kommt
      // man auf den gewünschten wert, aber achtung: in eingabe steht jetzt ein Steuerungs-
      // zeichen
    
      switch(eingabe){
    
        case 1: zahl="EINS"; break;
        case 2: zahl="ZWEI"; break;
        case 3: zahl="DREI"; break;
        case 4: zahl="VIER"; break;
        case 5: zahl="FÜNF"; break;
        default: zahl="Falsche Eingabe!";
      }
    
      puts(zahl);
    
      return 0;
    }
    


  • itedvo schrieb:

    dabei hat wutz vollkommen recht...

    int main(){
     
      char eingabe;
      const char* zahl;
    
      printf("Geben sie eine Zahl zwischen 1 und 5 ein!\n");
      scanf("%c", &eingabe);
    
      eingabe-=48; // 1 = 49, 2 = 50, 3 = 51 etc. wenn man davon jetzt 48 abzieht, kommt
      // man auf den gewünschten wert, aber achtung: in eingabe steht jetzt ein Steuerungs-
      // zeichen
    
      switch(eingabe){
    
        case 1: zahl="EINS"; break;
        case 2: zahl="ZWEI"; break;
        case 3: zahl="DREI"; break;
        case 4: zahl="VIER"; break;
        case 5: zahl="FÜNF"; break;
        default: zahl="Falsche Eingabe!";
      }
    
      puts(zahl);
    
      return 0;
    }
    

    Dsa richtige Funktionieren deines Codes wird von ANSI C aber auch nicht garantiert. ('0' muss nicht gleich 48 sein, Ü muss es vielleicht gar nicht im Zeichensatz geben). Macht es doch einfach mit case '5':, case '6', usw.



  • bist jetzt hat es bei mir immer super funktioniert, ok die
    umlaute sind nicht enthalten, dafür hab ich mir auch was geschrieben:

    #ifndef DEF_H
    #define DEF_H
    
    #define AE (unsigned char)142
    #define ae (unsigned char)132
    #define OE (unsigned char)153
    #define oe (unsigned char)148
    #define UE (unsigned char)154
    #define ue (unsigned char)129
    #define ss (unsigned char)225
    
    #endif /* DEF_H */
    


  • Oh Gott, hilf!



  • ach, wieso? es funktioniert und das zählt für mich...



  • itedvo schrieb:

    ach, wieso? es funktioniert und das zählt für mich...

    Das haben die AKWe in Japan bis jetzt auch. 🙄



  • bis auf den unterschied dass dieser programm-code nicht radio aktiv ist



  • itedvo schrieb:

    bis auf den unterschied dass dieser programm-code nicht radio aktiv ist

    Ja, und wenn er noch ein Backup in den USA macht ist er auch noch ziemlich sicher vor Naturkatastrophen.



  • wxSkip schrieb:

    itedvo schrieb:

    bis auf den unterschied dass dieser programm-code nicht radio aktiv ist

    Ja, und wenn er noch ein Backup in den USA macht ist er auch noch ziemlich sicher vor Naturkatastrophen.

    das wäre dann der anfang vom ende ^^

    nein, jetzt wirklich, was is an meinem code jetzt so schlimm ?


  • Mod

    itedvo schrieb:

    nein, jetzt wirklich, was is an meinem code jetzt so schlimm ?

    Zweibuchstabige Makros.



  • aha, und was währe für ä besser geignet als ae? etwa _ae was wiederum etwas ist
    was man vermeiden sollte, da underscore schon verwendet sein kann...

    was wären den bessere namen? damit ich es nächstes mal besser machen kann...


  • Mod

    itedvo schrieb:

    aha, und was währe für ä besser geignet als ae? etwa _ae was wiederum etwas ist
    was man vermeiden sollte, da underscore schon verwendet sein kann...

    was wären den bessere namen? damit ich es nächstes mal besser machen kann...

    1. Namen nehmen die nicht extrem häufig zufällig vorkommen können.
    2. Wozu überhaupt diese Makros? Entweder kennt deine Plattform die Zeichen sowieso - in diesem Fall kannst du sie direkt in die Stringliterale schreiben - oder sie kennt sie nicht und es kommt trotz der Makros Zeichensalat heraus.



  • Auf Windows ist sowas notwendig 😃
    <-- MacUser



  • Habe jetzt eine Loesung die funktioniert und fuer mich am durchschaubarstem erscheint:

    #include <stdio.h>
    int main(void)

    {
    int eingabe;

    scanf("%d", &eingabe);

    switch(eingabe)
    {
    case 5: printf("fuenf\n"); break;
    case 6: printf("Sechs\n"); break;
    case 7: printf("Sieben\n"); break;
    case 8: printf("Acht\n"); break;
    case 9: printf("Neun\n"); break;
    default: printf("hau rein!\n");break;
    }
    return 0;
    }

    Ist die Loesung legitim oder funktioniert es nur so in diesem Fall?

    Beste Gruesse



  • Du sollst einen char einlesen...


Anmelden zum Antworten