# Taschenrechner mit C



## psytekk (9. September 2007)

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;
}


----------



## Agent2 (9. September 2007)

int op kann nur eine Zahl sein.
Da +,*,-,/ aber keine Zahlen sind, musst du op anders deklarieren.

Als einfaches Zeichen am Besten:

char op;


----------



## Eichel65 (9. September 2007)

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ß


----------



## psytekk (9. September 2007)

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...


----------



## Dorschty (10. September 2007)

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


----------



## Eichel65 (10. September 2007)

Wenn dies nicht funkionieren sollte versuch mal die Variable so zu deklarieren...
char op[2];

Ohne weitere Worte ;D

Gruß


----------



## CroProgrammer (10. September 2007)

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 


```
#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;

}
```


----------

