Ich versuche C zu lernen und habe das folgende kleine Programm entwickelt.
%Vor%Das Programm kompiliert perfekt, aber die Antwort, die vom Programm zurückgegeben wird, macht keinen Sinn. Wenn ich 1.8 für die Höhe und 80 für das Gewicht eingib, ist bmi wie 1. # NF00, was keinen Sinn ergibt.
Was mache ich falsch?
scanf
(und scanf_s
) format %f
erwartet den Zeiger auf float
.
Ändern Sie einfach den Typ Ihrer Variablen height
und weight
in float
, um dies zu beheben.
Wenn Sie scanf
mit double
verwenden, müssen Sie den %lf
-Spezifikator verwenden, da Zeiger nicht mit scanf
hochgestuft werden.
Lesen Sie für weitere Informationen die folgende Frage: Warum scanf ( ) brauche "% lf" für doubles, wenn printf () in Ordnung ist mit nur "% f"?
Ich denke, Problem in scanf_s Syntaxis, Sie haben 3-rd-Argument, das ist die Größe des Puffers in Bytes. Versuchen Sie Folgendes:
%Vor%Der Nachteil von scanf () und printf () ist, dass es ein sehr striktes Format erfordert. Jede Nichtübereinstimmung zwischen der Kontrollzeichenfolge und dem Argument kann einen drastischen Fehler verursachen, der Ihre Eingabe oder Ausgabe sinnlos macht. Und dieser Fehler wird oft von Anfängern gemacht.
Wenn Sie den Formatbezeichner % f verwenden, müssen Sie den Datentyp float anstelle von double verwenden.
Das Problem ist, weil:
%Vor%Dafür gibt es zwei Möglichkeiten:
Entweder sollten die Variablen float
:
oder das format specifier
sollte mit double
übereinstimmen.
Tags und Links c types primitive-types