Mein Code:
%Vor% Ich gebe 2
ein,
Erwartete Ausgabe: 2 is what I entered
Tatsächliche Ausgabe: 2293324 is what I entered
Was ist das Problem hier?
ist falsch, weil %d
(in printf
) ein Argument vom Typ int
, nicht int*
erwartet. Dies ruft Undefined Behavior auf, wie im Entwurf (n1570) des C11-Standards (Hervorhebung von mir) :
7.21.6.1 Die Funktion fprintf
[...]
- Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten nicht definiert. 282) Wenn ein Argument nicht der richtige Typ für die entsprechende Konvertierungsspezifikation ist, ist das Verhalten nicht definiert. .
Beheben Sie es mit
%Vor% Dann Warum benötigt scanf
&
vor dem Variablennamen?
Beachten Sie, dass Sie bei Verwendung von number
den Wert der Variablen number
übergeben und bei Verwendung von &number
die Adresse übergeben von number
( &
ist der Adresse-of-Operator).
Also muss scanf
den Wert von number
nicht kennen. Er benötigt die Adresse (in diesem Fall int*
), um die Eingabe in die Datei zu schreiben.
printf
hingegen benötigt die Adresse nicht. Es muss nur den Wert ( int
, in diesem Fall) wissen, um gedruckt zu werden. Deshalb verwenden Sie &
nicht vor dem Variablennamen in printf
.
Sie verwenden operator & amp; auf number
, heißt Adresse davon übernehmen, also Sie drucke nicht den Wert von number
, aber die Adresse davon solltest du:
Dieser &
Operand gibt die Adresse der Variablen "number" an. Du solltest es nicht benutzen.
Lösung:
Dies sollte Ihr Problem lösen.
In scanf()
müssen Sie zuerst angeben, was das Eingabeelement sein soll (int, float, char, char *, etc ...) für Ihr Beispiel "%d"
steht für Integer.
Danach müssen Sie die Adresse Ihres Artikels erhalten. Deshalb müssen Sie den Operator &
vor der Variablen verwenden.
Ihr Fehler ist darauf zurückzuführen, dass Sie den &
-Operator auch für printf()
verwendet haben. Das bedeutet im Grunde, dass Sie die Adresse in dem Stapel drucken, in dem Sie die Ganzzahl gespeichert haben. Aber ohne &
drucken Sie den tatsächlichen Wert.
Hoffe, das hilft.