2017-12-22 10 views
2

与えられたファイルのすべての行を読み込もうとしています。
何らかの理由でstd::getlineが期待どおりに動作しません。
main.cppに:ファイルから読み込むことができない、奇妙な動作

#include <iostream> 
#include <fstream> 
#include <string> 
int main() { 
    std::string filePath = "../init.txt"; 
    std::ifstream inputFile(filePath); 
    std::string str; 
    int i = 0; 
    while (std::getline(inputFile,str)) { 
     std::cout << str << std::endl; 
     i++; 
    } 
    std::cout << i << std::endl; 
    inputFile.close(); 
    return 0; 
} 

../init.txt:

Game 
battlefieldSize,100,200 
players,2 
soldiers,3 
p1,human 
normal,[2 3],M16 
paramedic,[10 31] 
sniper,[5 12],UZI 
p2,computer,0 
normal,[90 112],Missile 
sniper,[90 113],M16 
normal,[65 100],M16 
Objects 
weapon,M16,[5 5] 
Armor,BodyArmor,0.8,[1 2] 
weapon,Missile,[15 115] 
solid,Tree,4,4,[20 20] 

あなたが見ることができるように、私はそれが変数iで、ループに入るうかという時間を知りたいと思いました。出力は:

solid,Tree,4,4,[20 20] 
1 

どうしてですか?

+1

デスクトップに複製することはできません。 –

+0

私の友人の一人が実際に 'std :: getline'でこのような振る舞いをしていました。彼のコードも完全にうまくいきましたが、古いバージョンのIDEのために誤ってコンパイルされました。あなたは、OPについては分かりませんが、万一、Code :: Blocksで作業していてオリジナルの開発者以外のソースからダウンロードした場合は、再ダウンロードして再インストールしてください。 – Fureeish

+0

複製できません。 'std :: string filePath =" ../ init.txt ";'に問題がありますか?たぶんあなたは別の 'init.txt'ディレクトリレベルを読み込んでいますか? – j4nu5

答えて

6

あなたのファイルはCR改行の代わりに、そのgetline() 1行としてファイル全体を読んでいる、Unixスタイルのオペレーティングシステムの標準であるLFを持っています。ファイルをTerminalに修正することができます。

tr '\r' '\n' <init.txt> newinit.txt 
mv newinit.txt < init.txt 
+0

あなたは何を求めていますか?あなたがアップヴォートを意味するなら、私はそれをしました。 – Barmar

+0

あなたが何を言っているのか分かりません。それはこの質問と何が関係していますか? – Barmar

+0

この質問のお手伝いをお願いいたします:https://stackoverflow.com/questions/47780622/mysql-left-join-incorrect-result – Barmar

関連する問題