Informatik Aufgabe
-
Hallo, ich habe eine Aufgabe bekommen und kann diese nicht lösen. Muss nen kleinen Taschenrechner bauen. Steh gerade am Anfang meiner Sprachkenntnisse.
Compiliere mit gcc unter ubuntu.
5. Dialog-Menüsteuerung mit if … else if … else
Zwei Integerzahlen werden von der Tastatur eingelesen. Aufgrund einer Auswahleingabe (‘+‘ für addieren, ‘-‘ für subtrahieren, ‘*‘ für multiplizieren und ‘/‘ für teilen) wird das Ergebnis der entsprechenden Rechnung ausgegeben. Benutzen Sie das if … else if … else Konstrukt.
Das Programm soll den Benutzer bei Ein- und Ausgabe hilfreich durch entsprechende Bild-schirminformationen in Form von Aufforderungen und Kommentierungen unterstützen.Hinweis:
Syntax des if … else if … else Konstruktes1
if (Ausdruck)
Anweisung;
else if (Ausdruck)
Anweisung;
else if (Ausdruck)
Anweisung;
else
Anweisung;
-
Was hast du denn schon gemacht (bzw. was sind deine Ansätze)
Ich unterstelle dir einfach mal dass du nicht hier bist um Hausaufgaben zu gammeln (auch wenn das unwahrscheinlcih ist)
-
und was willst? sollen wirs dir lösen oder arbeitest dich bischen ein und machst es selbst (lösung steht ja eh schon fast da)?
-
Das ist mein Ansatz, aber ich bekomme, den Übergang zwischen Rechenzeichenabfrage und if else nicht hin. Ich sehe, dass ich Fehler gemacht habe weiß aber nicht wie ich sie ändern soll.
Und wie gesagt bin erst seit zwei Wochen dabei und hab heute zum ersten mal was von if else gehört.#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(a+b)
printf("Ergebnis: %i\n",ab);
else
if(a-b)
printf("Ergebnis: %i\n",a-b);
else
if(ab)
printf("Ergebnis: %i\n",ab);
else
if(a/b)
printf("Ergebnis: %i\n",a/b);return 0;
}
-
sorry wenn wir dich jetzt so dumm angemacht haben aber es gibt so viele Leute die denken sie können hier ihre Hausaufgaben machen lassen (die Susi90s ^^)
Das Problem in deinem programm ist, dass du nicht den vom user eingegbenen Wert abfragst(also mit c=='+' usw) sondern abfragst ob a+b a-b usw ungleich 0 ist (alles außer 0 ist wahr)
-
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",ab);
else
if(c=='-')
printf("Ergebnis: %i\n",a-b);
else
if(c=='')
printf("Ergebnis: %i\n",ab);
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.hIch 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