2017-01-18 4 views
0

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

+1

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

Antwort

1

hinzufügen Es scheint, dass das Problem mit den Werten für i und Volt nicht nach jeder Iteration zurückgesetzt werden musste. Um dies zu beheben, habe ich die Codezeilen:

volt = ""; 
i = 2; 

(i auf 2 gesetzt ist in diesem Fall das Original-V zu übersehen und die =, wenn sie durch das Parsen) Ich lief dann das Programm erneut, um die Werte auszudrucken zu testen und es scheint, dass die korrekten Werte jetzt ausgegeben werden. Der gesamte Codeblock, der jetzt aktualisiert wird, sieht nun wie folgt aus:

0

Was haben Sie in Ihrem Code? Diese Zeichenfolge: "Volt = Volt + Wort [i];" - nehmen Sie einfach 2 Zahlen ASCII-Code der Zahl "2" (das ist 50) und 1 Zählnummer "0" (das ist 48). Dann nehme ich Ergebnis: 50 + 50 + 48 = 148. Ich habe diesen Code geändert. Hier ist es! Aber es gibt verwendete AnsiString und StrToInt-Funktion.

int volt=0, i=2; 
char word[20] = "U=220V\0"; 
AnsiString String; 

if(word[0] == 'U'){ 

    //declaring variables for checking for certain letters 
    char v = 'V'; 
    char m = 'm'; 
    char M = 'M'; 

    while(word[i] != v){ 
     //volt = volt + word[i]; 
     String += word[i]; 
     i++; 
     } 
    //cout << volt << endl; 
    volt = StrToInt(String); 
    } 
Verwandte Themen