2017-01-18 34 views
0

私が取り組んでいるプロジェクトでは、テキストファイルから整数を読み込もうとしています。この場合、それらは、U = 220Vのような変数としてフォーマットされているので、私はイコールこれは私が出ているコードであるVに署名した後から読み取るしようとしています:ではテキストファイルから整数を読み込む

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; 

テストケースでは、U = 200V、U = 220V、U = 22000mVの3つの値があります(mはミリ秒で、後に異なる関数で処理されます)。テストすると、出力が表示されます。

最初の出力は正しいです。 2番目と3番目のケースでは、最初の数が失われているように見え、3番目のケースでは、最後にもう1つゼロが追加されています。私はもともとそれだけで最初の値を破棄したと思った、私はそれが元々最初に読み値の前に読み込まれる値か見て

volt = volt + word[i]; 

volt = volt + word[i-1]; 

にコードの行を変更しました。この中で

=200 
=200 
=20000m 

は、私がここに見下ろす午前私のコードのロジックに欠陥があります:場合、それはとしてフォーマット出力で、正常に動作した場合、私はそれが何を期待する何をしましたか?

EDIT:それをさらにデバッグしようとしている間に、ループの外側からループ内に最終印刷行を移動して、ループが何段階ずつ出力しているかを確認しました。それは2で始まり、200000mで終了するまで各繰り返しの最後に0を続けているように見えます

+1

std :: getlineには、= simpleで分割するオーバーロードがあります。 =の後のテキストをストリングストリームにポップし、整数を読み込みます。読み込みは、最初の非整数文字、たとえばVで停止します。その後、その文字を読んでください。 – user4581301

答えて

1

iとボ​​ルトの値が各繰り返しの後にリセットされていないようです。この問題を解決するために、私は、コードの行を追加:

volt = ""; 
i = 2; 

(iはスルー解析するときに、元のV及び=を見落とすために、この場合には2に設定されている)私は、値をプリントアウト、再度プログラムを実行しテストすると正しい値が出力されるようになります。あなたのコードを持っている何

while (myfile >> word) { 

     volt = ""; 
     i = 2; 

     //printing out words (remove) 
     cout << word << endl; 

     //checking for U in words 
      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; 
       } 
       cout << volt << endl; 
0

:だから、コードのブロック全体は、更新され、今のように見えますか? この文字列: "volt = volt + word [i];" - 数字「2」(これは50)と1カウント数「0」(これは48)の2カウントのASCIIコードを取るだけです。それから私は結果を取る:50 + 50 + 48 = 148。 このコードを変更しました。ここにあります!しかし、AnsiStringとStrToInt関数が使用されています。

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); 
    } 
関連する問題