ifstream在文件中获取错误的字符串

时间:2012-09-03 16:43:18

标签: c++ fstream

代码如下:

守则:

#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
    int id;
    char name[50];
    ifstream myfile("savingaccount.txt");  //open the file
    myfile >> id;

    myfile.getline(name , 255 , '\n');   //read name **second line of the file
    cout << id ;
    cout << "\n" << name << endl; //Error part : only print out partial name 
    return 0;
}

文件内容:

1800567
何瑞章 21个

马来西亚
012-4998192
20,Lorong 13,Taman Patani Janam 马六甲
Sungai Dulong

问题:

1.)我希望getline将名称读入char数组名称然后我可以打印出名称,而不是获取全名,我只得到部分名称,为什么会发生这种情况?

谢谢!

1 个答案:

答案 0 :(得分:2)

问题是myfile >> id不会消耗第一行末尾的换行符(\n)。因此,当您调用getline时,它将从ID的末尾读取,直到该行的结尾,并且您将获得一个空字符串。如果再次呼叫getline,它实际上会返回名称。

std::string name; // By using std::getline() you can use std::string
                  // instead of a char array

myfile >> id;
std::getline(myfile, name); // this one will be empty
std::getline(myfile, name); // this one will contain the name

我的建议是只对所有行使用std::getline,如果一行包含一个数字,你可以使用std::stoi(如果你的编译器支持C ++ 11)或{{ 3}}