2017-06-20 2 views
-1

Je suis en train de résoudre l'algorithme glouton du cours cs50 sans utiliser le fichier d'en-tête cs50. J'ai écrit un code. Cela fonctionne bien avec des nombres comme entrée mais quand je lui donne une chaîne ou des alphabets comme entrée cela ne me demande pas de retour. Je ne sais pas comment résoudre le problème.Cs50 gourmande sans utiliser <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

Pourquoi utiliser des variables nommées '' C' et c' dans la même fonction? –

+0

Vous devez vérifier la valeur de retour de 'scanf ("% f ", &c);' pour savoir si un nombre a été lu –

+0

J'ai utilisé deux variables pour convertir le nombre à virgule flottante en nombre entier.J'ai vérifié les valeurs. mais je veux obtenir une invite même si j'ai entré des alphabets – Laxman

Répondre

0

Vous attendez c être négatif après votre entrée dans une séquence qui est pas un nombre à virgule flottante.

Cette hypothèse n'est pas valide. Si scanf échoue, la valeur de la variable lue n'est pas définie.

Vous devez vérifier la valeur de retour de scanf pour savoir si la lecture a bien été effectuée. Vous pouvez donc changer le code. Maintenant, si le scanf ne lit pas de virgule flottante, il retournera 0 et vous pourrez continuer à l'inviter.

Démo here

+0

J'avais manqué la partie où j'ai besoin de jeter la corde au cas où le flotteur n'est pas lu. Edité et ajouté. –

+0

@AjayBrahmakshatriya Votre code de démo fonctionne. Je vous remercie. – Laxman

+0

@BLUEPIXY Je pense que c'était le comportement requis - OP veut une invite re si l'entrée est négative. –