user3604259
user3604259

Reputation:

How to read txt file into vector and cout the file?

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

using namespace std;


int main()
{
    vector<int> temp;

    ifstream infile;
    infile.open("numbers");

    if (infile.fail())
    {
    cout << "Could not open file numbers." << "\n";
    return 1;
    }

    int data;
    infile >> data;
    while (!infile.eof()) {
    temp.push_back(data);
    infile >> data;
    }

    cout << data << " " << endl;



}

I am simply trying to cout all the numbers from the text file "numbers" using a vector.

15
10
32
24
50
60
25

My experience is pretty much nil, and some guidance on why this fails to open would be very helpful.

Upvotes: 0

Views: 6107

Answers (3)

David G
David G

Reputation: 96810

Your code isn't working because you haven't attempted to print anything from the vector?

How do I print a vector?

Well first you have to understand how not to print a vector. The last line in your code, particularly this one:

cout << data << " " << endl;

is only printing out the last integer from the text file. In the loop where you performed the input, infile >> data overwrote each previous value of data and assigned it to the currently read value from the file. The result is that when the loop finishes, data will be equal to the last read value, particularly 25 looking at your file.

There's no overload for operator<<() that will allow you to do something like cout << temp, though you can implement one yourself. There exist several ways to print a vector, the easiest being a simple loop:

for (unsigned i = 0; i < temp.size(); ++i)
    std::cout << temp[i] << " ";

Bonus: A faster way to print all the integers would be to print data from inside the loop. There's also the answer @KerrekSB made.

Upvotes: 2

Praxeolitic
Praxeolitic

Reputation: 24059

Your code is fine but you're printing the wrong thing. Change the bottom of main to this

int data;
while (infile >> data) {
    temp.push_back(data);
}

for( vector<int>::iterator i = temp.begin(); i != temp.end(); i++) {
    cout << *i << endl;
}

*Edited after reading the suggested dup.

Upvotes: 1

Kerrek SB
Kerrek SB

Reputation: 477040

Try this:

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

int main()
{
    std::ifstream infile("data.txt");

    if (!infile) { /* error opening file */ }

    for (int n : std::vector<int>(std::istream_iterator<int>(infile), {}))
    {
        std::cout << n << '\n';
    }
}

Of course you don't need the vector if you just want to process the numbers:

    for (std::istream_iterator<int> it(infile), end; it != end; ++it)
    {
        std::cout << *it << '\n';
    }

Upvotes: 1

Related Questions