zwei zahlen in einer Zeile einlesen
-
ok ich hab mir das sscanf angeschaut aber blick da nicht ganz durch
... char cPuffer[] = "15"; ... sscanf(cPuffer,"%c%f%F",&cOperant,&fZahl1,&fZahl2); if(cOperant == 'h') { ... } else { ... }
mir ist klar das else genommen wird da ja cPuffer standartmäßig "15" zugewiesen worden ist. aber wiso lässt er nciht mal einen eingabe zu??
ich starte das probramm und das else wird ausgeführt
warum???
wiso wartet das sscanf nicht auf einen eingabe des benutzers?//edit: ' vergessn
-
du hast dir den link nicht angeschaut, den ich dir gegeben hab!
in zukunft tue das bitte. ich hab keinen bock, alles mehrmals zu sagen.sscanf liest nicht von der standardeingabe, sondern aus einem string.
-
sorry
aber ich hab mir den link wirklich angeschaut
und die msdn auch
aber hab wahrscheinlich zuviel probleme mit englisch und deswegen nicht verstanden
-
Also dieses kleine Progrämmchen läuft einwandfrei. Und hör auf c.rackwitz: Du musst lesen, versuchen zu verstehen, weiterlesen... sonst wird das nix.
#include <stdio.h> #include <string.h> int main(void){ char buffer[100]; char operand; float zahl1,zahl2; fgets(buffer,sizeof(buffer),stdin); // Text einlesen sscanf(buffer,"%c %f %f", &operand , &zahl1, &zahl2); // "Parsen" // Berechnen if(operand=='+') printf("Ergebnis = %f\n",zahl1+zahl2); if(operand=='-') printf("Ergebnis = %f\n",zahl1-zahl2); if(operand=='*') printf("Ergebnis = %f\n",zahl1*zahl2); if(operand=='/') printf("Ergebnis = %f\n",zahl1/zahl2); return 0; }
-
Ich wuerde es ein wenig optimieren. Die if-Abfrage wird auch gelesen, wenn absolut klar, dass sie ein fals-Ergebnis produzieren wird. Also besser:
char *szErgebnissTxt = "Ergebnis = %f\n"; /*erspart unnoetiges Copy and Paste! */ switch (operand) { case '+': printf (szErgebnissTxt, zahl1-zahl2); break; case '-': printf (szErgebnissTxt, zahl1+zahl2); break; case '*': printf (szErgebnissTxt, zahl1*zahl2); break; case '/': /*hier sollte eine Anfrage herein, ob zahl2 wirklich ungleich 0 ist!*/ printf (szErgebnissTxt, zahl1/zahl2); break; default printf ("Unbekannter Operator <%c>\n", operant); break; /*eigentlich unnoetig, sieht aber besser aus */ }
-
wie waers mit einer if-else if-else kette?
switch ist hier aber immernoch besser.
-
Ich glaube, dass das hier scheissegal ist
-
ok danke nochmal für die hilfe
jup werd das nächste mal mehr, genauer und wenn nötig mit einem wörterbuch im anschlag lesen
+ noch mehr herumprobieren
(such funktion verwend ich bereits)naja das gröste problem für einen anfänger ist trotzen noch immer das lesen der hilfe, da blickt man oft gar nicht durch
aber gut ich werd mich hüten nochmal überfrüht jemanden anders fragen
-
TactX schrieb:
Ich glaube, dass das hier scheissegal ist
Dachte ich auch, bis ich mir die switch-Construction und die if-else im Dis-Aassembler anschaute. Die if-else Konstruktion hat ein paar Abfragen und Spruenge nach dem Zero-Flag mehr, muesste also geringfuegig langsamer sein (ist dafuer flexibler):
http://www.c-plusplus.net/forum/viewtopic-var-t-is-119321.html
-
MBCS-CITP schrieb:
TactX schrieb:
Ich glaube, dass das hier scheissegal ist
Dachte ich auch, bis ich mir die switch-Construction und die if-else im Dis-Aassembler anschaute. Die if-else Konstruktion hat ein paar Abfragen und Spruenge nach dem Zero-Flag mehr, muesste also geringfuegig langsamer sein (ist dafuer flexibler):
http://www.c-plusplus.net/forum/viewtopic-var-t-is-119321.html
Das "scheissegal" bezog sich eher darauf, dass es hier für mein Beispiel relativ egal ist, da der Code eh nur zur Veranschaulichung für das eigentliche Problem gedacht ist. Normalerweise hätte ich hier natürlich auch kein if if if if gemacht. Es war einfach übersichtlicher.
Außerdem könnte ich mir vorstellen, dass es Compiler gibt die für alle drei Varianten gleichen Code erzeugen. Aber das ist hier nicht das Thema