If Abfrage mit float will nicht so recht
-
Klappt mit else if leider auch nicht. D.h. also von der Syntax her wären die Abfragen richtig. Beim kompilieren meckert der Debugger nicht rum, ansonsten habe ich leider keine Ahnung wie man das mit dem Debugger extra macht, benutze den Borland C++ Builder 5.
Gibt es denn eine andere Lösung bzw andere Datentypen mit denen das genauer wird?
-
chazzz schrieb:
Beim kompilieren meckert der Debugger nicht rum, ansonsten habe ich leider keine Ahnung wie man das mit dem Debugger extra macht, benutze den Borland C++ Builder 5.
Beim Compilieren hat der Debugger auch noch nichts zu sagen
(und wo du bei Borland in den Debugger kommst, bin ich mir nicht sicher - kannst du einen Breakpoint auf das erste if() setzen und danach verfolgen, was mit deinen Variablen passiert)Im Ernsfall hilft noch "Hardcore-Debugging" - du packst in die einzelnen if-Zweige eine Testausgabe ala
clog<<Wahl x: p="<<preis<<" f="<<preisfaktor<<endl;
-
Bezüglich Debugging beim BCB
http://www.junix.ch/bcb/help/debug.html
-
So..habe jetzt in jede If-Abfrage eine Ausgabe gesetzt um zu sehen welche If-Abfragen er durchläuft. Er führt bei jeder Zahl nur den ersten If-Block aus, setzt preisfaktor also auf 1. Nur wenn preis 1.9 beträgt führt er den letzten Block aus un setzt preisfaktor also auf 0.
So ganz erklären kann ich mir das immer noch nicht.
-
Zeig bitte nochmal deinen jetztigen Code, inklusive der Deklarationen.
-
Das ganze sieht in etwas gekürzter Form so aus:
float preis; float preisfaktor; float anzahl; float verkauft; printf("Preis pro Becher: "); scanf("%lf",&preis); fflush(stdin); if(preis < 1) { //If-Kontrolle printf("\nDurchlauf 1"); preisfaktor = 1; } else if(preis >= 1 && preis < 1.3) { //If-Kontrolle printf("\nDurchlauf 2"); preisfaktor = 0.8; } else if(preis >= 1.3 && preis < 1.6) { //If-Kontrolle printf("\nDurchlauf 3"); preisfaktor = 0.7; } else if(preis >= 1.6 && preis < 1.9) { //If-Kontrolle printf("\nDurchlauf 4"); preisfaktor = 0.5; } else if(preis >= 1.9 && preis < 3.5) { //If-Kontrolle printf("\nDurchlauf 5"); preisfaktor = 0.15; } else if(preis >= 3.5) { //If-Kontrolle printf("\nDurchlauf 6"); preisfaktor = 0; } verkauft = verkauft * preisfaktor; verkauft = ceil(verkauft); printf("\nSie haben %.0lf Artikel verkauft",verkauft);
-
Zeile 52: Sollte natürlich heißen
verkauft = anzahl * preisfaktor;
-
Erstens: Lass das 'l' bei den Formatstrings weg, solange du nicht mit double-Werten arbeitest.
Zweitens: fflush(stdin) ist Humbug.
Drittens: Gib mal kontrollweise aus, was überhaupt in 'preis' eingetragen wurde.
(PS: Und der Kram sieht eher nach C aus als nach C++)
-
Zu zweitens und dem PS, unser Programmierlehrer meinte das muss so sein, auf die Frage warum konnte er mir allerdings keine Antwort nennen. Habe mir das jetzt so angewhnt damit ich in seinen arbeiten keinen Abzug bekomme.
-
Habe das Problem jetzt! Wenn ich bei den Formatstrings das l weglasse gibt er mir auch die Zahl aus die ich eingegeben habe, mit %lf kommt bei Preis nämlich immer 0 raus, ausser wenn die Eingabe 1 ist, dann kommt da ne ziemlich lange Zahl raus.
Vielen Dank!
-
chazzz schrieb:
Zu zweitens und dem PS, unser Programmierlehrer meinte das muss so sein, auf die Frage warum konnte er mir allerdings keine Antwort nennen. Habe mir das jetzt so angewhnt damit ich in seinen arbeiten keinen Abzug bekomme.
Dann schick ihn doch mal hier vorbei, damit er sich das richtig erklären lassen kann.
Kurzfassung: fflush() schreibt eigentlich nur Ausgabedaten vom Dateipuffer nach außen, was bei Eingabeströmen (wie stdin) passiert, ist "implementation defined".
(und MS war so "freundlich", die Funktion so umzubiegen, daß sie den Lesepuffer eines Eingabestroms entsorgt - leider ist das überhaupt nicht portabel)PS: Und mit dem PS da oben meinte ich nur, daß du im falschen Board gelandet bist

Edit:
chazzz schrieb:
Habe das Problem jetzt! Wenn ich bei den Formatstrings das l weglasse gibt er mir auch die Zahl aus die ich eingegeben habe, mit %lf kommt bei Preis nämlich immer 0 raus, ausser wenn die Eingabe 1 ist, dann kommt da ne ziemlich lange Zahl raus.
War zu erwarten - mit %lf interpretiert scanf() die Eingabevariable als double - und die sind etwas anders aufgebaut als float's.
-
Ok vielen Dank! Werd mal versuchen ihm das zu erklären
Ob das jetzt C oder C++ ist kann ich so genau noch nicht beurteilen, ich weiß nur dass das Fach bei uns "Programmiertechnik C++" heißt.Also vielen Dank nochmal! Ich werde sicher weiterhin mit ein paar Fragen zu euch kommen
