2017-10-18 3 views
0

Wie kann ich richtig sehen, wie viele Eingänge in meiner scanf Funktion gelesen wurden? wenn ich den folgenden Code ausführen es das Ergebnis nicht angezeigt werden, ist dies, weil ich nicht haben 2 Eingänge von scanf oder aus einem anderen Grund lesen hier ist mein Code:Wie validiere ich richtig wie viele Eingaben in scanf gelesen wurden?

#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 Hoffe, dass dies helfen kann. – Mare70

+2

Wollten Sie scanf zweimal anrufen? – user2867342

+0

"Wie viele Eingänge wurden in meiner scanf-Funktion gelesen?" -> Wie möchten Sie, dass der Benutzer angibt, dass die Eingabe abgeschlossen ist? Durch die Eingabe von Text und dann ein "\ n"? Sollte der Eingang '" 123 \ n "' report nur 1 Nummer eingegeben werden oder auf die nächste Zeile der Eingabe warten wie '" 456 \ n "'? – chux

Antwort

1

Sie haben zwei Anrufe von scanf in Ihrem Code . Das Ergebnis des ersten Aufrufs wird ignoriert, während das Ergebnis des zweiten Aufrufs überprüft wird.

Wenn Sie zwei Zahlen eingeben, gibt die erste scanf 2 zurück, die Ihr Code ignoriert. Danach versucht der Anruf an die zweite scanf zwei weitere Nummern zu lesen.

Sie können dieses Problem beheben, indem Sie den ersten Aufruf scanf Entfernung:

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

Sie nicht den Rückgabewert von scanf() in der erwarteten Art und Weise verwenden. Es ist da, um den Erfolg/Misserfolg beim Scannen zu identifizieren und eine Entscheidung darüber zu treffen.

Es gibt drei Dinge, die Sie tun müssen.

  • Entfernen Sie die beiden Linien

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

    Dies liegt daran, ohne zu überprüfen, ob Sie die Zielvariablen zu verwenden versuchen, kann es Werte im Fall unbestimmt scanf() ausfällt. Auch gibt es wiederholt scanf() s, die einfach falsch sind und nicht benötigt werden.

  • Fügen Sie die Zeile float result = numberOne + numberTwo; in den Bedingungsblock if (howManyRead == 2) ein.

  • die & vom printf Aufruf entfernen: printf("%f", result);

+0

danke @melpomene, das macht drei Punkte, bereits aktualisiert. :) –

+0

Grund für den Downvote? –

Verwandte Themen