Was Ihr Code tut ist, dass er eine vorzeichenbehaftete Nummer von der Standardeingabe liest. (%d
liest bis zum Leerzeichen, ignoriert aber den Leerraum selbst.) Dann schreibt es diese Nummer (die erste Zahl wäre 123
) in Ihr sales
Array bei Index 0
. Dann schreiben Sie den Rückgabewert Ihrer commision(...)
-Funktion an die Standardausgabe.
dann plötzlich automatisch 456 zum Umsatz zuordnen [0]
Wenn durch, dass Sie bedeuten, dass sales[0]
enthalten 456
am Ende der Ausführung des Programms statt 123
es ist, weil das ganze Verfahren I beschrieben oben ist getan, solange Ihre do while
Schleife läuft. Und wenn Umsatz [0] größer als -1
ist, was der Fall ist, weil sales[0]
123
nach dem ersten Verfahren ist, wird es wieder laufen und lesen Sie 456
von der Standardeingabe und schreiben Sie das auf die sales
Array.
Einige weitere Beispiele für scanf_s("%d", int_pointer, 1)
Lesen Eingabe von stdin
:
- Eingang
42 43ab 44
würde in 3 verschiedenen scanf_s
als 42
, 43
und 44
gelesen werden.
- Eingabe
42 a
würde in 2 verschiedenen scanf_s
als 42
und 0
gelesen werden.
- Eingang
42 a a43 44
würde in 4 verschiedenen scanf_s
als 42
, 0
, 0
44
und gelesen werden.
ich sehe .... aber warum die Regel gilt nicht für Char-Typ (Beispiel ich Eingabe ab [Leerraum] d die Ausgabe nur Sales = "ab" und die Zeichenfolge nach [Leerraum] gelöscht? und eins mehr noch, ich habe immer noch verwirrt, wo hat der compiler die 456 gespeichert? denn zuerst hat er 123 zu sales [0] zugewiesen und es gibt keine variable übrig für das speichern von 456 .... nach der ersten schleife macht es die 2. schleife (scanf statement), warum der scanf plötzlich die 456 bekommt woher kam ich? correct me wenn ich bin –
Was meinst du mit "apply for char type"? Wenn deine Variable vom Typ 'char' ist (wie' char sales [1] ') und du machst' scanf_s ("% d", sales, 1) 'dann interpretiert' scanf_s' die Eingabe immer noch als eine vorzeichenbehaftete Ganzzahl. Das bedeutet, sobald du zBBei Leerzeichen oder Zeilenumbrüchen wird die Eingabe geparst und alle Zeichen der Eingabe, die einen gültigen vorzeichenbehafteten int bilden, werden in die Variable "hineingelegt" (hier 'sales') - alle nachfolgenden werden ignoriert (Eingabe' 42ab' = '42 'Wenn (wie in meinem obigen Beispiel)' sales' vom Typ 'char' ist, wird die gelesene Ganzzahl eine 8 Bit Eins anstelle von 32 (die meisten' Int's) oder 64 Bit sein – mxscho
Der Compiler macht hier nichts. Zur Laufzeit des Programms geschieht alles. Bei der zweiten Ausführung von 'do while' ersetzt' scanf_s' nur den Wert in 'sales [0]' - also wird '123' durch' 456' ersetzt. – mxscho