Ich habe gerade angefangen zu programmieren, also weiß ich, das ist wahrscheinlich ein sehr grundlegender Fehler, aber ich habe versucht, herauszufinden, wie Sie den logischen Fehler in meinem Code beheben für die greedy.c Auftrag von Harvard CS50 Kurs ohne Erfolg. Ich habe nach Lösungen für das Problem gesucht, aber alle scheinen es auf eine andere Weise zu lösen, als ich es versuche. Ich habe die anderen Beispiele umgedreht, und ich verstehe sie jetzt, aber ich möchte wirklich wissen, wie ich meine eigene Version gut laufen lassen kann.Neuer Programmierer, ich brauche Hilfe auf greedy.c von Harvard CS50
Ich versuche, das Problem durch eine Reihe von while-Schleifen zu lösen, die jeweils einen bestimmten Münzwert vom Gesamtbetrag subtrahieren und eine Münze zur Gesamtanzahl der Münzen hinzufügen. Für mich scheint es logisch, dass es Sinn macht, aber wenn ich das Programm ausführe, gibt es mir nicht die erwartete Ausgabe. Es führt die printf-Anweisung einfach nicht unten aus. Ich hoffe, dass einer von euch da draußen witzelt und mir dabei helfen kann! Danke für jede Hilfe!
Heres mein Code:
#include <stdio.h>
#include <cs50.h>
int main (void)
{
printf("How much change is needed?\n");
float owed = get_float();
int coins = 0;
/*While loops subtracting one coin from change owed, and adding one to coin count*/
while (owed >= 0.25)
{
owed = owed - 0.25;
coins = coins + 1;
}
while (owed >= 0.1)
{
owed = owed - 0.1;
coins = coins + 1;
}
while (owed >= 0.05)
{
owed = owed - 0.05;
coins = coins + 1;
}
while (owed >= 0.01)
{
owed = owed - 0.01;
coins = coins + 1;
}
/*While loops done, now print value of "coins" to screen*/
if (owed == 0)
{
printf("You need %i coins\n", coins);
}
}
Edit:
Also spielte ich mit ihm um ein wenig mehr, und fertig, dass "wenn" Aussage. Es gibt einen Fehler für mich zurück, also wie ist der Wert von "geschuldet" am Ende des Programms ungleich 0?
#include <stdio.h>
#include <cs50.h>
int main (void)
{
printf("How much change is needed?\n");
float owed = get_float(); //Gets amount owed from user in "x.xx" format
int coins = 0; //Sets initial value of the coins paid to 0
//While loops subtracting one coin from change owed, and adding one to coin count
while (owed > 0.25)
{
owed = owed - 0.25;
coins = coins + 1;
}
while (owed > 0.1)
{
owed = owed - 0.1;
coins = coins + 1;
}
while (owed > 0.05)
{
owed = owed - 0.05;
coins = coins + 1;
}
while (owed > 0.01)
{
owed = owed - 0.01;
coins = coins + 1;
}
//While loops done, now print value of "coins" to screen
if (owed == 0)
{
printf("You need %i coins\n", coins);
}
else
{
printf("Error\n");
}
}
Edit:
Also, wenn mein Code arbeitet, begann ich mit ihm und Overengineering Hantieren. Heres die letzte (für jetzt) Version!
#include <stdio.h>
#include <cs50.h>
#include <math.h>
#include <time.h>
int main (void)
{
srand(time(0)); //generates random seed
float price = round(rand()%500); //generates random price between 0 and 500 cents
printf("You owe %f. How much are you paying?\n", price/100); //shows user their price between 0 and 5 dollars
printf("Dollars: ");
float paymnt = get_float()*100; //gets the amount user will pay in dollars then converts to cents
int owed = round (paymnt - price); //calculates the change owed by paymnt-price
int coins = 0; //Sets initial value of the coins paid to 0
int quarters= 0;
int dimes = 0;
int nickels = 0;
int pennies = 0;
if (owed ==0 && price >0) //If someone pays in exact
{
printf("You paid the exact amount!\n");
}
else if (owed < 0) //If someone doesn't pay enough
{
printf("You didn't give us enough money!\n");
}
else //Else(We owe them change)
{
printf("Your change is %i cents\n", owed);
//While loops subtracting one coin from change owed, and adding one to coin count
while (owed >= 25)
{
owed = owed - 25;
quarters = quarters + 1;
}
while (owed >= 10)
{
owed = owed - 10;
dimes = dimes + 1;
}
while (owed >= 5)
{
owed = owed - 5;
nickels = nickels + 1;
}
while (owed >= 1)
{
owed = owed - 1;
pennies = pennies + 1;
}
//While loops done, now print each coin and total coins needed to screen
if (owed == 0)
{
coins = quarters + dimes + nickels + pennies;
printf("You need %i coins (%i quarters, %i dimes, %i nickels, and %i pennies)\n", coins, quarters, dimes, nickels, pennies);
}
else
{
printf("Error\n");
}
}
}
Die Verwendung von Gleitkommatypen für die Währungsbuchhaltung wird als schlechte Idee angesehen (und eine nette Hintertür zum Runden von Betrügereien). –
Für einige Beispieleingabe, was ist die erwartete Ausgabe? Und was ist die * tatsächliche * Ausgabe? Bitte bearbeiten Sie Ihre Frage, um diese Details hinzuzufügen. Und bitte nehmen Sie sich auch etwas Zeit, um zu lesen [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) von Eric Lippert. –
Danke Eugene. Ich habe es in ganzzahlige Berechnungen geändert. Gute Idee. –