2017-10-18 40 views
0

Comment puis-je voir correctement combien d'entrées ont été lues dans ma fonction scanf? quand je lance le code ci-dessous ne montre pas le résultat, est-ce parce que je n'ai pas 2 entrées lues à partir scanf ou une autre raison voici mon code:Comment valider correctement le nombre d'entrées lues dans scanf

#include <stdio.h> 

int main() 
{ 
float numberOne; 
float numberTwo; 

scanf("%f %f", &numberOne, &numberTwo); 
float result = numberOne + numberTwo; 

int howManyRead = scanf("%f %f", &numberOne, &numberTwo); 

if (howManyRead == 2) 
{ 
    printf("%f", &result); 
} 
else 
{ 
    printf("invalid input"); 
} 
sleep(10); 

} 
+0

https://stackoverflow.com/questions/10469643/value-returned-by-scanf-function-in-c Espérons que cela peut aider. – Mare70

+2

Voulez-vous dire d'appeler scanf deux fois? – user2867342

+0

"combien d'entrées ont été lues dans ma fonction scanf?" -> Comment voulez-vous que l'utilisateur indique que l'entrée est complète? En entrant du texte et ensuite un ''n''? Devrait-on entrer "123 \ n" 'signaler que 1 seul numéro a été entré ou attendre la ligne de saisie suivante comme" 456 \ n "'? – chux

Répondre

1

Vous avez deux appels de scanf dans votre code . Le résultat du premier appel est ignoré, tandis que le résultat du second est vérifié.

Lorsque vous entrez deux nombres, le premier scanf renvoie 2, que votre code ignore. Après que l'appel à la seconde scanf essaie de lire deux nombres supplémentaires.

Vous pouvez corriger cela en supprimant le premier appel à scanf:

float numberOne, numberTwo; 
if (scanf("%f %f", &numberOne, &numberTwo) == 2) { 
    float result = numberOne + numberTwo; 
    printf("%f", result); 
} else { 
    printf("invalid input"); 
} 
-1

Vous n'utilisez pas la valeur de retour de scanf() de la manière attendue. Il est là pour identifier le succès/l'échec de l'analyse et prendre une décision en fonction de cela.

Il y a trois choses à faire.

  • Retirez les deux lignes

    scanf("%f %f", &numberOne, &numberTwo); 
    float result = numberOne + numberTwo; 
    

    En effet, sans contrôle, si vous essayez d'utiliser les variables de destination, il peut être des valeurs indéterminées dans le cas scanf() échoue. En outre, il y a scanf() répétées qui sont tout à fait fausses et non nécessaires. Ajouter la ligne float result = numberOne + numberTwo; à l'intérieur du bloc de conditions if (howManyRead == 2).

  • Retirez le & du printf appel: printf("%f", result);

+0

merci @melpomene, cela fait trois points, mis à jour déjà. :) –

+0

Pourquoi Downvote? –