Für ein Projekt, an dem ich gerade arbeite, versuche ich ganze Zahlen aus einer Textdatei einzulesen. In diesem Fall werden sie als Variablen, wie U = 220V formatiert, so versuche ich, aus zu lesen, nachdem das Gleichheits auf die V. anmelden Dies ist der Code, ich bin gekommen, sich mit:Ganzzahlen aus einer Textdatei einlesen
if (word[0] == 'U') {
//declaring variables for checking for certain letters
char v = 'V';
char m = 'm';
char M = 'M';
//taking in integer for voltage
while (word[i] != v) {
volt = volt + word[i];
i++;
}
cout << volt << endl;
In der Testfall, es gibt drei Werte, die U = 200V, U = 220V und U = 22000mV (das m ist Milli und wird später mit einer anderen Funktion behandelt werden) zufällig in einer Datei eingefügt. Beim Test erhalte ich die Ausgabe:
Der erste Ausgang ist korrekt. Im zweiten und dritten Fall scheint es die Nummer an erster Stelle zu verlieren und im dritten Fall hat es am Ende eine weitere Null hinzugefügt. Ursprünglich dachte ich, es war nur der erste Wert zu verwerfen, änderte ich die Codezeile
volt = volt + word[i];
zu
volt = volt + word[i-1];
, um zu sehen, was es zu schätzen, bevor der Wert eingelesen würde ursprünglich zuerst eingelesen. In diesem Fall tat es, was ich würde erwarten, dass es, wenn es tun wurde ordnungsgemäß funktioniert, mit Ausgabe formatiert:
=200
=200
=20000m
gibt es einen Fehler in der Logik meines Codes, die ich hier bin mit Blick auf?
EDIT: Während ich versuchte, es weiter zu debuggen, bewegte ich die letzte Druckzeile von außerhalb der While-Schleife nach innen, um zu sehen, was die Schleife Schritt für Schritt ausgab. Es scheint, dass es beginnt mit 2 und fährt fort, eine 0 am Ende jeder Iteration bis zum Ende mit 200000m
std :: getline hat eine Überladung, die das Aufteilen auf die = einfach macht. Fügen Sie den Text nach dem = in einen Stringstream ein und lesen Sie eine Ganzzahl. Der Lesevorgang wird bei dem ersten nicht ganzzahligen Zeichen, beispielsweise dem V, angehalten. Dann lies dieses Zeichen. – user4581301