简体   繁体   English

C ++从文件读取整数和字符串

[英]C++ Reading ints and strings from file

I have a file that looks like : 我有一个看起来像的文件:

4
Sam Stone
2000
Freida Flass
100500
Tammy Flass
5000
Rich Raptor
55000

I am trying to read from it, but the first getline in the while loop always returns nothing. 我正在尝试从中读取内容,但是while循环中的第一个getline始终不返回任何内容。 The int 4 gets read correctly. 正确读取int 4。

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <string>

using namespace std;

const int SIZE = 60;


struct person
{
    string name;
    double money;
};

int main()
{
    char filename[SIZE];
    string input;
    char inputs [50];
    int value;
    int count = 0;
    vector<person> Members;

    ifstream inFile;
    inFile.open("carinfo.txt");
    if (!inFile.is_open()){ cout << "Could not open fle"; }

    inFile >> value;
    Members.resize(value);

    while (inFile.good())
    {
        inFile.getline(inputs, SIZE); //getline(inFile, input, '\n');
        inFile >> value;

        count++;
    }
    cout << "Total lines = " << count;

    system("pause");
    return 0;
}

Consider using std::string and op>>(std::istream, person) to read the elements, this works for me 考虑使用std::stringop>>(std::istream, person)读取元素,这对我有用

#include <string>
#include <vector>
#include <limits>
#include <fstream>
#include <iostream>
#include <iterator>

struct person
{
    std::string name;
    double money;
};

//read in 1 person
std::istream& operator>>(std::istream& is, person& p) {
    is >> p.money;
    is.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::getline(is, p.name);
    return is;
}

int main() {
    //open stream
    std::ifstream file("fname");
    //create vector, let the stream operators do the hard work
    std::vector<person> v((std::istream_iterator<person>(file)),
                           std::istream_iterator<person>());

    std::cout << "count: " << v.size();
}

http://en.cppreference.com/w/cpp/iterator/istream_iterator http://en.cppreference.com/w/cpp/iterator/istream_iterator

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM