Taschenrechner mit C

psytekk

Grünschnabel
Hallo Miteinander

ich habe ein kleines Problem ich bin zurzeit in einem Lehrgang bei dem ich die Sprache C lerne. Wir haben eine Aufgabe gekommen einen Taschenrechner zu programmieren. Das problem ist das ich es nicht schaffe einen Operator wie + - / * % einzulesen.

Weiss jemand vileicht was der fehler ist ?

Besten Dank im voraus ;)

Code:

#include <stdio.h>

int main(void)
{

int zahl1, zahl2, res;
int op;


printf("Bitte geben sie die erste zahl ein:\n");
scanf("%hd", &zahl1);

printf("Bitte geben sie die zweite zahl ein:\n");
scanf("%hd", &zahl2);

printf("Bitte geben sie ein wie gerechnet werden soll.\n");
scanf("%hd", &op);
if (op == '+') {
printf("Die Summe ist: %hd", (zahl1 + zahl2));
}
if (op == '-') {
printf("Die Summe ist: %hd", (zahl1 - zahl2));
}
if (op == '*') {
printf("Die Summe ist: %hd", (zahl1 * zahl2));
}
if (op == '/') {
printf("Die Summe ist: %hd", (zahl1 / zahl2));
}
return 0;
}
 
int op kann nur eine Zahl sein.
Da +,*,-,/ aber keine Zahlen sind, musst du op anders deklarieren.

Als einfaches Zeichen am Besten:

char op;
 
Also, dein Problem liegt beim einlesen der "Verbindung"!

Wie du bestimmt gelernt hast kann eine Integer Variable "nur" Zahlen "speichern".
D.h. in eine Int-Variable kannst du lediglich ganze Zahlen einlesen!

Du versuchst hier aber einen "Operator", wie z.B. "/" etc. in eine INT-Vairable reinzuschreiben, und da wie gesagt diese Variable nur ganze Zahlen ( 0 1 2 3 4 etc. ) speichern kann funktioniert dies nicht!

Eine Alternative ist der Character ( char )...

Dort können alle Arten von "Zeichen" die die ASCII-Tabelle beinhaltet gespeichert werden, auch Zahlen ( wobei das Rechnen dort weitaus schwerer fällt )...

Ein weiteres Problem ist das deine Ergebnisse nur ganzzahlig ausgegeben werden. Hier wird "5/2 = 2"... da du dies aber bestimmt nicht willst kann ich dir hier auch Abhilfe schaffen ;D!

Eine Integer-Variable kann nur ganzzahlige Werte speichern! Eine Float Variable hingegen kann auch "Komma-Zahlen" speichern ( und berechnen )!

Wenn du also anstatt int - float benutzt, bekommst du auch "richtige" Ergebnisse!!

Das ganze könntest du auch mit einem "cast" realisieren, aber ich möchte dich nicht jetzt noch unnötig verwirren, das lernst du dort bestimmt noch zur gegebenen Zeit!

Ich ändere schnell mal deinen Code!

#include <stdio.h>

int main(void)
{

float zahl1, zahl2;
char op;


printf("Bitte geben sie die erste zahl ein:\n");
scanf("%f", &zahl1);

printf("Bitte geben sie die zweite zahl ein:\n");
scanf("%f", &zahl2);

printf("Bitte geben sie ein wie gerechnet werden soll.\n");
scanf("%c", op);
if (op == '+') {
printf("Die Summe ist: %f", (zahl1 + zahl2));
}
if (op == '-') {
printf("Die Summe ist: %f", (zahl1 - zahl2));
}
if (op == '*') {
printf("Die Summe ist: %f", (zahl1 * zahl2));
}
if (op == '/') {
printf("Die Summe ist: %f", (zahl1 / zahl2));
}
return 0;
}

So sollte alles funktionieren ( nicht getestet ) ;D

Ich hoffe ich konnte dir weiterhelfen ;D

Gruß
 
Vielen Dank für die schnelle Antwort.

Also des einte funktioniert jetzt mal soweit ( if op = + ..... ) was allerdings nicht funktioniert ist wenn ich "scanf("%c", &op);" verwende.... dan wird der Operator nicht erfragt sondern das Programm wird gleich beendet. :(

ich habs dan versucht mit "scanf("%d", &op);" (Bitte nicht böse sein :) ) hat leider auch nicht funktioniert... Der Operator wurde erfragt aber danach wurde leider nicht gerechnet....(Keine Ausgabe das Programm wird nach einer leerzeile beendet.)

Habe auch deinen code via Copy&paste getestet.... leider das selbe Resultat... die Operator eingabe wird übersprungen...
 
Hi,

das liegt daran, das in der Variable c schon etwas drinsteht. Das Problem hatte ich schon häufiger! Initialisier deine Variable c mal mit ' ', also
char c=' ';
Bei deinem scanf musst du bei %c bleiben! %d ist für Int-Werte, warum das nicht funktioniert hast du ja weiter oben schon erfahren.

Gruß
Dorschty
 
Hier der Code! Definier den Operator einfach als String!
Würde aber noch eine IF-Abfrage einbauen damit durch 0 nicht dividiert werden kann!
MFG

Code:
#include <stdio.h>
#include<string.h>

int main(void)
{

float zahl1, zahl2;
char op;


printf("Bitte geben sie die erste zahl ein:\n");
scanf("%f", &zahl1);

printf("Bitte geben sie die zweite zahl ein:\n");
scanf("%f", &zahl2);

printf("Bitte geben sie ein wie gerechnet werden soll<+,-,*>: \n");
scanf("%s", &op);

if (op == '+') 
{
	printf("Die Summe ist: %f \n", (zahl1 + zahl2));
}
else if (op == '-') 
{
	printf("Die Summe ist: %f\n", (zahl1 - zahl2));
}
else if (op == '*') 
{
	printf("Die Summe ist: %f\n", (zahl1 * zahl2));
}
else if (op == '/') 
{
	printf("Die Summe ist: %f\n", (zahl1 / zahl2));
}
return 0;

}
 
Zuletzt bearbeitet:
Zurück