Informatik Aufgabe



  • Kein Thema;-)
    bin halt neu und brauch nen Anstoss...
    Funktioniert so allerdings nicht.

    #include<stdio.h>

    int main()
    {
    int a,b,c;
    printf("\nGeben Sie eine ganze Zahl ein: ");
    scanf("%i",&a);
    printf("Geben Sie eine zweite ganze Zahl ein: ");
    scanf("%i",&b);
    printf("\nGeben Sie ein Rechenzeichen ein,\n");
    printf("\"+\" für Addition,\n");
    printf("\"-\" für Subtraktion,\n");
    printf("\"\" für Multiplikation,\n");
    printf("\"/\" für Division:\n");
    printf("Rechenzeichen: ");
    scanf("%i",&c);
    if(c=='+')
    printf("Ergebnis: %i\n",a
    b);
    else
    if(c=='-')
    printf("Ergebnis: %i\n",a-b);
    else
    if(c=='')
    printf("Ergebnis: %i\n",a
    b);
    else
    if(c=='/')
    printf("Ergebnis: %i\n",a/b);

    return 0;
    }



  • du darfst auch das Rechenzeichen nicht per "%i" einlesen,
    da du keine Zahl einlesen willst, sondern ein Zeichen.

    dafür ist der Platzhalter "%c" gedacht.

    also einfach:

    printf("Rechenzeichen: ");
        scanf("%c",&c);
    

    das zusammen mit den bisherigen Änderungen sollte dein Problem lösen 🙂

    MfG DrakoXP



  • Danke, aber nö, bekomme dann folgende Fehlermeldung:

    16: warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘int *’

    Jetzt habe ichs noch so probiert, klappt aber auch nich.

    #include<stdio.h>

    int main()
    {
    int a,b;
    char c[20];
    printf("\nGeben Sie eine ganze Zahl ein: ");
    scanf("%i",&a);
    printf("Geben Sie eine zweite ganze Zahl ein: ");
    scanf("%i",&b);
    printf("\nGeben Sie ein Rechenzeichen ein,\n");
    printf("\"+\" für Addition,\n");
    printf("\"-\" für Subtraktion,\n");
    printf("\"\" für Multiplikation,\n");
    printf("\"/\" für Division:\n");
    printf("Rechenzeichen: ");
    scanf("%c",&c);
    if(c=='+')
    printf("Ergebnis: %i\n",a+b);
    else
    if(c=='-')
    printf("Ergebnis: %i\n",a-b);
    else
    if(c=='
    ')
    printf("Ergebnis: %i\n",a*b);
    else
    if(c=='/')
    printf("Ergebnis: %i\n",a/b);

    return 0;
    }



  • leider funktioniert das nicht auf allen Compilern:

    #include<stdio.h>
    
    int main()
    {
        int a,b;
        char c; // hier geändert
        printf("\nGeben Sie eine ganze Zahl ein: ");
        scanf("%i",&a);
        printf("Geben Sie eine zweite ganze Zahl ein: ");
        scanf("%i",&b);
        printf("\nGeben Sie ein Rechenzeichen ein,\n");
        printf("+ für Addition,\n");
        printf("- für Subtraktion,\n");
        printf("* für Multiplikation,\n");
        printf("/ für Division:\n");
        printf("Rechenzeichen: ");
        scanf("%1s", &c);  // hier geändert
        if(c=='+')
            printf("Ergebnis: %i + %i = %i\n",a , b, a+b);
        else if(c=='-')
            printf("Ergebnis: %i\n",a-b);
        else if(c=='*')
            printf("Ergebnis: %i\n",a*b);
        else if(c=='/')
            printf("Ergebnis: %i\n",a/b);
    
        return 0;
    }
    

    So sieht das mit Code-Tags aus.

    Ich weiss jetzt nicht was ihr kennt und/oder vom C-Sprachschatz nutzen dürft.

    Wenn es bei euch nicht funktioniert, ist scanf dafür zuständig - der Eingabepuffer wird nicht immer richtig verwaltet.

    MfG f.-th.



  • Also erstmal Danke an alle!

    Der letzte Eintrag funzt.
    Ich verstehe auch alles bis auf den Platzhalter für die Rechenzeichen.

    "scanf("%1s", &c); // hier geändert"
    Welche Bedeutung hat das 1s???

    Gruß, schönen Abend noch und nen angenehmes WE!



  • scanf("%1s", &c); // lese einen String mit der Länge 1 ein
    


  • Hab noch mal nach gesehen -> der Compiler der keinen Fehler oder eine Warnung heraus gab, aber trotzdem nicht richtig arbeitete, vermisste folgende Zeile im Quelltext:

    #include<string.h>
    


  • DANKE



  • f.-th. schrieb:

    leider funktioniert das nicht auf allen Compilern:

    scanf("%1s", &c);  // hier geändert
    

    Kein Wunder dass es nicht auf allen Compilern funktioniert, ist nämlich undefiniertes Verhalten da in nicht reserviertem Speicherbereich geschrieben wird.



  • Dann machen wir halt mal einen Test.

    Nach Einbindung des Headers

    #include<string.h>
    

    funktioniert es auf, alphabetisch:
    free Bcc 5.5 -> wobei bei Borland-Compilern von damals gar die Position der Leerzeichen bei der Funktion von scanf() manchmal zu beachten war.
    digital mars 8.52 -> der brauch nicht mal string.h
    gcc 4.4.1 -> der brauch string.h

    Ich hab auch schon andere Standpunkte im Netz gelesen -> Microsoft, ja MS und C 😃 empfielt seine scanf() Varianten, die es als Erweiterung von C bislang nicht in C99 oder so beinhaltet, nur von Mircosoft gibt, zu nutzen. scanf() sei zu vermeiden. Hab keinen MS-Compiler installiert - aber im MSDN kann man das lesen.

    Aber was wollt ihr jemand der die ersten Schritte in C machen soll an der Stelle empfehlen 😕 Soll der praktisch erst alle verfügbaren und sich widersprechenden Infos lesen. Welche Schlüsse soll der aus den Widersprüchen ziehen?

    So, nu Butter bei die Fische 👍


Anmelden zum Antworten