我需要编写一个读取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
但是在运行代码之后,输出就像是:
我不明白为什么会这样。有人可以告诉我我哪里做错了吗?谢谢。这是代码:
#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;
}
答案 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;
}