Von der Hilfeseite für die Xscanf-Familie der Funktionen:
Nach erfolgreichem Abschluss geben diese Funktionen die Anzahl von zurück erfolgreich übereinstimmende und zugewiesene Eingabefelder ; Diese Anzahl kann Null sein im Falle eines frühen Übereinstimmungsfehlers. Wenn die Eingabe vorher endet der erste übereinstimmende Fehler oder die Konvertierung, EOF zurückgegeben werden. Wenn ein Lesefehler tritt auf, der Fehlerindikator für den Stream wird gesetzt, EOF soll zurückgegeben werden, und errno soll eingestellt werden Geben Sie den Fehler an
So gibt Ihr erster Aufruf an fscanf
1 zurück, weil ein Eingabeelement ( &number1
) erfolgreich mit dem Formatbezeichner %d
abgeglichen wurde. Ihr zweiter Aufruf an fscanf
gibt 4 zurück, weil alle 4 Argumente übereinstimmen.
Ich zitiere von cplusplus.com .
Bei Erfolg gibt die Funktion die Anzahl der Elemente des Arguments zurück Liste erfolgreich ausgefüllt Diese Anzahl kann der erwarteten Anzahl entsprechen Elemente oder weniger (sogar Null) aufgrund eines passenden Fehlers, ein Lesen Fehler oder die Reichweite des Dateiendes.
Wenn ein Lesefehler auftritt oder das Dateiende während erreicht wird Beim Lesen wird der richtige Indikator gesetzt (Feof oder Ferror). Und, wenn beides Bevor Daten erfolgreich gelesen werden können, wird EOF zurückgegeben.
- BEARBEITEN -
Wenn Sie beabsichtigen, die Anzahl der Bytes zu bestimmen, die in einer Zeichenfolge gelesen werden.
%Vor%Auf der Handbuchseite :
* Diese Funktionen geben die Anzahl der Eingabeelemente zurück, die erfolgreich abgeglichen und zugewiesen wurden. Dies kann weniger sein als vorgesehen oder sogar Null im Falle eines frühzeitigen Übereinstimmungsfehlers. *
Folglich gibt 1 1 zurück, wenn es in der Lage ist, eine ganze Zahl aus der Datei zu lesen, 2 gibt 4 zurück, wenn es 4 ganze Zahlen aus der Datei lesen kann.
Dies ist eine sehr direkte Frage und wurde von Charles und Ed vor mir passend beantwortet. Aber sie haben nicht erwähnt, wo man beim nächsten Mal nach solchen Dingen suchen sollte.
zuerst die Frage - Der fscanf gehört zu der Familie der formated input (scan) -Funktionen, die eine Eingabe lesen und Informationen über die gelesenen Daten wie Bytes oder die Anzahl der Elemente (variable Adressen) melden sollen, die eine entsprechende Eingabe erhalten haben und erfolgreich zugeordnet wurden .
hier soll der fscanf nach Übereinstimmungen in der Eingabedatei mit der im Funktionsaufruf vorgesehenen Format-Zeichenkette suchen und dementsprechend die (in der Reihenfolge ihrer Position) Variable - Adresse dem Wert zuordnen und nach Abschluss wird die Summe zurückgegeben zählen Sie für die Anzahl der erfolgreichen Aufgaben, die es gemacht hat. daher war das Ergebnis von 1 und dem nächsten 4 (vorausgesetzt, die Eingabe wurde ordnungsgemäß bereitgestellt).
zweiter Teil: wo suchen? - gut beschriebene details für eine solche funktion finden sie leicht in ihren manualseiten oder posix doc, wenn sie auf eines verweisen.
Wenn Sie bemerkt haben, enthalten die vorherigen zwei Antworten auch kleine Auszüge aus den man-Seiten.
hoffe das hilft.
Der Rückgabewert hängt nicht von der Anzahl der Argumente für fscanf
ab, er hängt von der Anzahl der erfolgreich von fscanf
gescannten Werte ab.
Wenn Sie diesen Code mit DatastoreService verwenden, kann ClassCastException Long nicht in Ganzzahl von fromEntity umgewandelt werden. Ist es normales Verhalten? (Ich bekomme dieses Verhalten beim Debuggen auf lokalen Computer mit Google Plugin für Eclipse)
%Vor%Muss ich diese Ausnahme immer so fangen:
%Vor%Oder sind vielleicht alle numerischen Werte nur so lang gespeichert? Muss ich den _integerval-Typ zu lang ändern, um diese Ausnahme zu vermeiden?
Wenn du %code% in deinem Programm benutzen willst, funktioniert das ok:
%Vor%Vergewissern Sie sich immer noch, dass die Zahl in den int-Bereich (hier ) gelangt ).
Erstellen Sie eine neue Ganzzahl:
%Vor%Benutze %code% anstelle von %code% beim Casting.
%Vor%Bearbeiten:
Folgendes ist in der setProperty API.
Da der Wert im Datenspeicher gespeichert wird, wird er in den Datenspeicher des Datenspeichers Dies kann eine Verbreiterung, z. B. eine Konvertierung, umfassen ein kurzer zu einem langen.
So werden Ihre int -Daten in den Datentyp des Datenspeichers als %code% konvertiert. Cast mit %code% oder %code% .
Integer-Werte werden als Long gespeichert, sodass die App-Engine immer Long zurückgibt, ich war selbst verwirrt, aber dann habe ich dies
Wie in der offizielle Dokumentation
Da der Wert im Datenspeicher gespeichert wird, wird er in den Datenspeicher des Datenspeichers Dies kann eine Verbreiterung, z. B. eine Konvertierung, umfassen ein kurzer zu einem langen.
Also
Holen Sie sich Long und verwenden Sie .intValue ()
%Vor%