2017-06-20 4 views
-1

Ich löse den Greedy-Algorithmus von cs50 natürlich ohne die cs50-Header-Datei zu verwenden. Ich habe einen Code geschrieben. Es funktioniert gut mit Zahlen als Eingabe, aber wenn ich ihm eine Zeichenfolge oder Alphabete als Eingabe gebe, gibt es mich nicht zurück. Ich weiß nicht, wie ich das Problem lösen soll.Cs50 gierig ohne zu verwenden <cs50.h>

#include <stdio.h> 

int main() 
{ 
float c; 
int C, nQ, rem1, nD, rem2, nN, rem3; 

do 
{ 
    printf("O hai! How much change is owed? "); 
    scanf("%f", &c); 
} 
while(c<0); 

C = c * 100; 

nQ = C/25; 
rem1 = C % 25; 

nD = rem1/10; 
rem2 = rem1 % 10; 

nN = rem2/5; 
rem3 = rem2 % 5; 

printf("%d\n", nQ+nD+nN+rem3); 
} 
+1

Warum Sie Variablen 'C' und 'c' in der gleichen Funktion mit dem Namen verwenden würden? –

+0

Sie müssen den Rückgabewert von 'scanf ("% f ", &c);' überprüfen, ob 1 Zahl gelesen wurde.) –

+0

Ich habe zwei Variablen verwendet, um den Fließkomma in Ganzzahl zu konvertieren. Ich habe die Werte überprüft Ich möchte jedoch eine Eingabeaufforderung erhalten, selbst wenn ich Alphabete eingib .. – Laxman

Antwort

0

Sie erwarten c negativ zu sein, nachdem Sie eine Sequenz eingegeben, die nicht eine Gleitkommazahl ist.

Dies ist keine gültige Annahme. Wenn scanf fehlschlägt, ist der Wert der gelesenen Variablen nicht definiert.

Sie müssen den Rückgabewert von scanf überprüfen, um zu wissen, ob das Lesen tatsächlich erfolgreich war. So können Sie den Code in ändern.

Nun, wenn das scanf nicht liest, wird es 0 zurückgeben und Sie können die Eingabeaufforderung fortsetzen.

Demo here

+0

Ich hatte den Teil verpasst, wo ich die Zeichenfolge verwerfen muss, falls der Float nicht gelesen wird. Bearbeitet und hinzugefügt. –

+0

@AjayBrahmakshatriya Ihr Demo-Code funktioniert. Vielen Dank. – Laxman

+0

@BLUEPIXY Ich denke, das war das erforderliche Verhalten - OP möchte eine erneute Eingabeaufforderung, wenn die Eingabe negativ ist. –

Verwandte Themen