2017-04-11 4 views
2

Ich bin auf das folgende Stück Code gestoßen und ich bin nicht in der Lage, den scanf Teil zu verstehen.Im Zusammenhang mit Scanf-Anweisungen in c

int main() 
{ 
    int i,j; 
    scanf("%d %d"+scanf("%d %d",&i,&j)); 
    printf("%d %d",i,j); 
    return 0; 
} 

lief ich den Code an den Eingängen 4 8 9 und es ergab 9 8.

Kann jemand die Arbeits bitte erklären?

+1

Ich bin überrascht, dass es mit gcc3.4.4 kompiliert. Das ist sehr seltsam für mich ... – cleblanc

+1

es funktioniert nicht für mich –

+2

Ich denke, es ist UB. – BLUEPIXY

Antwort

5

Die innere scanf("%d %d",&i,&j) gibt eine Zählung zurück, wie 2,1, EOF (oder vielleicht 0).

Wenn Sie diesen Wert der Formatzeichenfolge "%d %d" hinzufügen, wird das Format um den Wert, z. B. um 2, versetzt, um " %d" zu bilden. Dies ist einfach eine Zeigeraddition. @John Bollinger

Dann Code macht das Äquivalent von scanf(" %d"); die undefinierten Verhalten ist (UB), da es eine passende int * fehlt mit dem " %d" zu gehen. @mch

Kann mir bitte jemand die Funktionsweise erklären?

Es ist nicht "funktioniert", es ist UB.


Eine Variante, die auf thin ice tritt. Es wird "funktionieren", wenn der erste scanf() 2 zurückgibt. Doch das sieht für mich wie ein Hacker-Code aus.

int main() { 
    int i,j; 
    scanf("%d %d"+scanf("%d %d",&i,&j), &i); 
    printf("%d %d",i,j); 
    return 0; 
} 
+0

Was bedeutet das + nach "% d% d"? Wir verwenden in der Regel "," nach Formatbezeichner –

+2

@harshvardhan, es ist der Additionsoperator. In diesem Fall handelt es sich um den Zeiger + Integer-Flavor. Deshalb sagt chux: "Diese Anzahl zum Formatstring hinzufügen [...]." –

Verwandte Themen