kann mir jemand helfen?
-
Ich muß einen Taschenrechner programmieren und muß dies mit der funktion gets()bewerkstelligen...wollte das mit switch/case programmieren.habe es soweit hinbekommen das +- berrechnungen funktionieren.aber irgendwie funktioniert es mit multiplikation nicht,weil die variable var1 den wert der vorigen berrechnung hat.sie sollte aber so wie bei +- des mit hilfe von sscanf eingetippten wert haben.kann mir jemand helfen dies ist mein ansatz...
#include <stdio.h> int main(){ char string1[0]; char string2[0]; float ergebniss=0; float var1=0; float var2=0; printf("\nAnfangszahl eingeben:"); do{ gets(&string1); sscanf(&string1,"%f",&var1); switch(string1[0]) { printf("=%f",var1); gets(&string2); sscanf(&string2,"%f",&var2); case '+': ergebniss+=+var1; printf("%f",ergebniss); break; case '-': ergebniss-=-var1; printf("%f",ergebniss); break; case '*': ergebniss*=var1; printf("%f",ergebniss); break; } } while(string1[0]!='='); }
-
Ist das ein Kopierfehler oder Absicht, dass beim switch() gleich nach { der Code zum Einlesen der zweiten Zahl kommt? Das ist nämlich falsch. Das solltest du schon vorher machen. Außerdem wärs besser, wenn du die Zahlen und den Operator extra einliest. Dann kannst du den Operator auswerten und dementsprechend mit den Zahlen arbeiten.
-
Danke für deine Antwort...ich fang am besten nochmal an...der ansatz ist schon etwas extrem falsch:-)
-
hab jetzt einen neuen ansatz...der ist auch nicht perfekt weil ich umständlich return drücken muß nach dem ich den operator eingetippt habe.gibt es eine funktion die meine cursor position positioniert???die muß aber in der standart bibliothek sein,weil es sonst wieder zu aufwändig wär für so ein programm die extra einzubinden...hab mal was von gotoxy(posx,posy)gehört...ich will die zahlen und den operator in einer zeile haben z.b 12*12=(return)
ich hoffe ich hab mein problem verständlich rübergebracht.kann mir da jemand helfen?int main() { char string1[100],operator[100],erg[100],var2; float ergebniss,var1; int i; printf("\nAnfangszahl eingeben:"); gets(string1); sscanf(string1,"%f",&var1); printf("%f",var1); for(i=1;i>0;i++){ gets(operator); sscanf(operator,"%c",&var2); gets(erg); sscanf(erg,"%f",&ergebniss); switch(var2) { case '+': var1+=ergebniss; printf("\n=%f",var1); break; case '-': var1-=ergebniss; printf("\n=%f",var1); break; case '*': var1*=ergebniss; printf("\n=%f",var1); break; case '/': var1/=ergebniss; printf("\n=%f",var1); break; case '%': //var1%=ergebniss; printf("\n=%f",var1); break; case '=': printf("=%f\n\n",var1); return 0; break; } } }
-
Ja es gibt ein gotoxy(). Die Funktion ist aber nicht im Standard. Schau zum Positionieren des Cursors am besten in die Konsolen-FAQ.
Probier mal bei deinem Programm folgende Rechenoperation einzugeben: 5 / 0
-
Thanks AJ...ist es so besser?
welche bibliothek benötigt man für gotoxy???
int main() { char string1[100],operator[100],erg[100],var2; float ergebniss,var1; int i; printf("\nAnfangszahl eingeben:"); gets(string1); sscanf(string1,"%f",&var1); printf("%f",var1); for(i=1;i>0;i++){ gets(operator); sscanf(operator,"%c",&var2); gets(erg); sscanf(erg,"%f",&ergebniss); while(!ergebniss){ printf("(Sie haben eine Null eingegeben)Bitte neue eingabe!: "); gets(erg); sscanf(erg,"%f",&ergebniss); } switch(var2) { case '+': var1+=ergebniss; printf("\n=%f",var1); break; case '-': var1-=ergebniss; printf("\n=%f",var1); break; case '*': var1*=ergebniss; printf("\n=%f",var1); break; case '/': var1/=ergebniss; printf("\n=%f",var1); break; case '%': break; case '=': printf("=%f\n\n",var1); return 0; break; } } }
-
c-neuling schrieb:
Thanks AJ...ist es so besser?
welche bibliothek benötigt man für gotoxy???
da gibt es etwas zu finden unter http://www.c-plusplus.net/code/improved_console/
wie man das einbindet kannst du nachlesen in den konsolen FAQ unter http://www.c-plusplus.net/forum/viewtopic.php?t=39319
MfG Mirauder Mo
-
Danke!werd gleich mal nachschauen....
-
c-neuling schrieb:
Thanks AJ...ist es so besser?
welche bibliothek benötigt man für gotoxy???(Noch eine etwas verbesserte Version)
int main() { char string1[100],operator[100],erg[100],var2; float ergebniss,var1,wert3; int i,wert1,wert2; printf("\nAnfangszahl eingeben:"); gets(string1); sscanf(string1,"%f",&var1); printf("%f",var1); for(i=1;i>0;i++){ gets(operator); sscanf(operator,"%c",&var2); gets(erg); sscanf(erg,"%f",&ergebniss); while(!ergebniss){ printf("(Sie haben eine Null eingegeben)Bitte neue eingabe!: "); gets(erg); sscanf(erg,"%f",&ergebniss); } //if(var2=='%'){ switch(var2) { case '+': var1+=ergebniss; printf("\n=%f",var1); break; case '-': var1-=ergebniss; printf("\n=%f",var1); break; case '*': var1*=ergebniss; printf("\n=%f",var1); break; case '/': var1/=ergebniss; printf("\n=%f",var1); break; case '%': wert1=var1; wert2=ergebniss; wert3=wert1%wert2; var1=wert3; printf("%f",var1); break; case '=': printf("=%f\n\n",var1); return 0; break; } } }
-
Nein ist nicht besser, da es ja auch durchaus den Fall geben kann, dass ich 1 + 0 rechnen will, auch wenn es keinen Sinn macht ;). 1 - 0 und 1 * 0 soll auch gehen, aber was ist an 1 / 0 falsch?
-
Ich finde das die eingabe falsch,oder besser gesagt ungüldig ist da sie ja wie du gesagt hast keinen sinn ergibt...für die leute die unbedingt 0 eintippen wollen und sich dann freuen weil sie keine fehlermeldung sondern ein ergebniss sehen,müssen dann den code für die eingabe prüfung einfach so ändern:
if(!ergebniss&&var2!='+'&&var2!='-'){ ergebniss+=1;