printf ("% d") zeigt nicht an, was ich eingegeben habe

7

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?

    
Steven Elcarim 16.08.2015, 14:21
quelle

6 Antworten

10
%Vor%

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

     

[...]

     
  1. 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. .
  2.   

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 .

    
Cool Guy 16.08.2015, 14:23
quelle
7

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:

%Vor%     
songyuanyao 16.08.2015 14:24
quelle
4

Wenn Sie die -Wall -g -Compileroption verwendet hätten, hätten Sie den Fehler während der Kompilierzeit richtig sehen können:

%Vor%     
tnbt 16.08.2015 14:45
quelle
2

Dieser & Operand gibt die Adresse der Variablen "number" an. Du solltest es nicht benutzen.
Lösung:

%Vor%     
Ali Yeşilkanat 17.08.2015 18:26
quelle
2
%Vor%

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.

    
Jack 16.08.2015 14:33
quelle
0

Sie können versuchen, die & amp; von der Nummer und einfach einfach die Nummer schreiben

%Vor%

Es zeigt und zeigt den Speicherplatz Ihres Eingangs an, dh 2

    
ninja 16.08.2015 16:55
quelle

Tags und Links