从txt文件中读取数字后无法正确显示数字(C ++)

时间:2016-02-11 04:11:30

标签: c++ file-io

我需要编写一个读取txt文件的代码(包含2列,第1列是int类型,第2列是double类型)

13 2.7

42 3.1

78 1.6

37 7.8

17 2.7

然后打印出如下表格:

1 | 13 | 2.7

2 | 42 | 3.1

3 | 78 | 1.6

4 | 37 | 7.8

5 | 17 | 2.7

但是在运行代码之后,输出就像是:

click

我不明白为什么会这样。有人可以告诉我我哪里做错了吗?谢谢。这是代码:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;

int main()
{
ifstream in_file;
string filename;
const int NUM_LINES = 10;
const int NUM_COLUMNS = 2;
const int COLUMN_WIDTH = 10;
cout << "In order to process, please enter the file name: ";
cin >> filename;
in_file.open(filename.c_str());
if (!in_file.is_open())
{
    cout << "Cannot open file" << endl;
}
else
{   
    for (int k = 0; k < NUM_LINES; ++k)
    {
        int intValue;
        double doubleValue;
        in_file >> intValue >> doubleValue;
        cout << setw(COLUMN_WIDTH) << (k + 1) << " | ";
        cout << setw(COLUMN_WIDTH) << intValue << " | ";
        cout << setw(COLUMN_WIDTH) << doubleValue << endl;
    }
}

system("pause");
return 0;
}

2 个答案:

答案 0 :(得分:1)

代码在我的机器上按预期运行。我相信您的文件中包含字符,可能是您未考虑的数据的某些格式或标题。

答案 1 :(得分:0)

此代码应与简单的输入重定向配合使用

#include <iostream>
using std::cout;
using std::cin;
using std::cerr;
using std::endl;
#include <vector>
using std::vector;
#include <string>
using std::string;
#include <cstdlib>
#include <utility>
using std::pair;

int main() {

    int integer;
    double decimal_value;

    vector<pair<int, double>> pair_values;
    while (cin >> integer >> decimal_value) {
        pair_values.push_back({integer, decimal_value});
    }

    // print out the values in a table format
    for (auto val : pair_values) {
        cout << val.first << '\t' << '|' << '\t'
            << val.second << endl;
    }

    return 0;
}

这应该适用于文件流

#include <iostream>
using std::cout;
using std::cin;
using std::cerr;
using std::endl;
#include <fstream>
using std::ifstream;
#include <vector>
using std::vector;
#include <string>
using std::string;
#include <cstdlib>
#include <utility>
using std::pair;

int main() {

    // get the input file stream
    string filename;
    ifstream fin;
    cout << "Please enter the input filename : ";
    cin >> filename;
    fin.open(filename.c_str());
    if (!fin) {
        cerr << "Could not open file with filename " << filename << endl;
        exit(1);
    }

    int integer;
    double decimal_value;

    vector<pair<int, double>> pair_values;
    while (fin >> integer >> decimal_value) {
        pair_values.push_back({integer, decimal_value});
    }

    // print out the values in a table format
    for (auto val : pair_values) {
        cout << val.first << '\t' << '|' << '\t'
            << val.second << endl;
    }

    return 0;
}