2015-02-07 54 views
0

我正在做一些调试,并且我意识到数据的读取是错误的。我试图使用分隔符将从txt读取的数据存储到不同的变量中。C++将数据从txt存储到使用分隔符的变量中

data.txt中

homer:mtrjw:member:0 
bryan:gw~fs:member:0 
adam:fifr:member:0 
admin12:firns67:admin:0 

代码:

string user, pwd, role; 
string lock; 
ifstream inFile; 
inFile.open("data.txt"); 

while(inFile.good()){ 

    getline(inFile, user, ':'); 
    getline(inFile, pwd, ':'); 
    getline(inFile, role, ':'); 
    getline(inFile, lock, ':'); 

    cout << user << " " << pwd << " " << role << " " << lock << " " << endl; 
    /* 
    some if conditions... 
    }*/ 
} 

输出:

homer mtrjw member 0 
bryan 
gw~fs member 0 
adam fifr 
member 0 
admin12 firns67 admin 
0 
taken yfpjs member 0 
brian 
gwnfs member 1 
miller rnqqjw 
member 0 
1 
miller rnqqjw 

正如可以看到只输出第一线被正确地存储和显示,第二线路向前都是错误的。任何解决方案?

+0

将分隔符添加到输出中:“cout <<”user:“<< user <<”pwd:“<< ...”。你的价值观并不在你认为的地方。 – molbdnilo 2015-02-07 08:42:04

+0

nope does not make a different i only cout to see data,is wrong wrong – 2015-02-07 08:50:56

+0

是的,这是错误的。添加分隔符会指出您遇到错误。 – molbdnilo 2015-02-07 08:56:42

回答

1

我认为有两个问题: 第一个问题是,您正在寻找四次。但是,当它是第四次了,你应该期望'\ n',因为':':

string user, pwd, role; 
string lock; 
ifstream inFile; 
inFile.open("data.txt"); 

while(inFile.good()){ 
getline(inFile, user, ':'); 
getline(inFile, pwd, ':'); 
getline(inFile, role, ':'); 
getline(inFile, lock, '\n'); 

cout << user << " " << pwd << " " << role << " " << lock << " " << endl; 
/* 
some if conditions... 
}*/ 

}

第二个是你的“\将只后布莱恩满足n'在这种情况下成为的一部分。

0

变化

getline(inFile, lock, ':'); 

getline(inFile, lock); 

当您使用第一种形式,它读取从第一行,换行的0行了,一切都交给在第一:第二行并将其放入lock

相关问题