Frage von problemaffe, 44

Zeichen in C vergleichen (char)?

Hallo Leute, meine Frage richtet sich an Programmierer. Ich habe die Aufgabe bekommen, einen einfachen Taschenrechner zu Programmieren, bei dem man eine Zahl immer wieder mit einer neuen entweder addiert, subtrahiert, multipliziert oder dividiert. Mein Problem ist nur dass es bei mir nicht funktioniert, Operatoren miteinander zu vergleichen. Buchstaben funktionieren gut aber Operatoren halt nicht.

Weiß jemand wie das funktioniert?

Ich benutze Dev-C++ und habe es mit einer normalen if Anweisung versucht.

Vielen Dank schonmal im Vorraus, LG Problemaffe

Antwort
von spaghetticode, 22

Das Problem ist der Eingabepuffer. Du gibst eine Zahl ein und drückst RETURN. Im Eingabepuffer landet eine Zahl und ein Newline-Zeichen ("\n").

Dann liest dein erstes scanf die Zahl ein, ist zufrieden und lässt das Newline-Zeichen im Puffer. Jetzt kommt dein zweites scanf daher und stellt fest: Hey, da liegt ja schon was im Eingabestrom! - und wartet deine zweite Eingabe deshalb gar nicht mehr ab, sondern liest das Newline-Zeichen ein.

Dein if-Konstrukt vergleicht jetzt das Newline-Zeichen mit '+' - was natürlich false liefert.

Standardkonforme Möglichkeiten, den Puffer zu leeren, findest du hier: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044873249&id=104328...

Kommentar von problemaffe ,

Aaah cool Danke für die Antwort. Habe mir heute mal hingesetzt und mir über das was du mir geschickt hattest Gedanken gemacht. Und siehe da es klappt.

Hab es auch mal mit  while(getchat()!='\12'); versucht und dann gemerkt, dass ich dass bei jedem scanf machen muss und nicht nur bei der chareingabe :D
Danke Danke hat mir sehr weitergeholfen =)

Kommentar von spaghetticode ,

Keine Sorge, das ist eine ganz übliche Anfängerfalle. Bin ich selbst mehr als nur einmal reingetappt - bis ich irgendwann ein Lehrbuch vor mir hatte, das zum ersten Mal genau diesen Sachverhalt erläutert hat. :-)

Antwort
von Seanna, 34

Zeig mal deinen Code.

Und ich würde da eher zu switch-case raten als zu if-then.

Kommentar von problemaffe ,

Da hast du recht. habe ich auch schon versucht, mit dem selben Ergebnis. Mit Buchstaben klappt es immer.. Nur mit +,-,*,/ dann nicht..

Also bin noch lange nicht fertig. Bin nur soweit, dass ich getestet habe, dass die die char Variable auf verglichen wird, was allerdings nicht geschieht.

//Main Anfang
int main(void){
//Variablen
double eingabe;
double erg=0;
char op;
printf("Einfacher Taschenrechner\nBitte geben Sie Zahlen und den Operator ein (+,-,*,/)\n\n");
//Schleifenanfang
//do{
//Eingabe einer Zahl
printf("Zahl: ");
scanf("%lf", &eingabe);
//Eingabe des Operators
printf("Operator: ");
scanf("%c", &op); INCLR
//Operatorenvergleich
if(op == '+'){
printf("PLUS");}
//} while(op != '0'); //Schleifenende mit Bedingung
//Main Ende
printf("\n\n");
system("PAUSE");
}

Keine passende Antwort gefunden?

Fragen Sie die Community