我的代码遇到了一些问题。我被要求将.dat文件中的元素输入到数组中。对于类,我们必须为各种文件执行此操作,而不知道每个文件中将包含多少元素。我们唯一知道的是,每个文件永远不会超过5000个元素。
我的一个输入文件包含以下元素:
5.675207 -0.571210
0.728926 0.666069
2.290909 0.751731 2.004545 0.907396
0.702893 0.646427 5.909504 -0.365045
2.082645 0.871841 5.597107 -0.633507
6.117769 -0.164663 6.091736 -0.190282
5.571074 -0.653433 4.503719 -0.978307
3.983058 -0.745620
3.670661 -0.504729
5.857438 -0.413001
当我运行我的代码时:
#define _CRT_NONSTDC_NO_DEPRECATE
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
ifstream fin;
ofstream fout;
if (argc < 3)
{
cout << "Incorrect usage: prog.exe filenname number" << endl;
cout << "Exiting now, please try again." << endl;
return -1;
}
fin.open(argv[1]);
if (!fin)
{
cout << "Error opening file \"" << argv[1] << "\", exiting." << endl;
return -1;
}
fout.open(argv[2]);
int count = 0;
int word;
double points[5000];
while (fin >> word)
{
fin >> points[count];
++count;
}
fout << "Numer of points is: " << count/2 << endl;
for (int i = 0; i < count; i++)
{
fout << points[i] << " ";
}
fin.close();
fout.close();
return 0;
}
我输出的元素只是为了确保它们输入正确。我得到以下内容,我不知道为什么。
0.675207 0.57121
0.728926 0.666069
0.290909 0.751731 0.004545 0.907396
0.702893 0.646427 0.909504 0.365045
0.082645 0.871841 0.597107 0.633507
0.117769 0.164663 0.091736 0.190282
0.571074 0.653433 0.503719 0.978307
0.983058 0.74562
0.670661 0.504729
0.857438 0.413001
由于某种原因,第一个数字转换为0,负数转为0。谁会知道为什么会这样?
答案 0 :(得分:0)
当您从文件中读取数字时,您将其提取为“单词”,然后将它们存储为“点”。 “word”是一个整数,“points”是一个double,这会给你带来意想不到的行为。编译器应该给你关于此的警告。
答案 1 :(得分:0)
int word;
对你没有好处。首先它是一个整数,所以fin >> word
只读取输入的整数部分。 5.675207读取为5. .675207保留在fin >> points[count]
的文件流中。单词不存储在5中的任何地方被丢弃但.675207仍然存在于points[0]
中的0.675207。
在出现负面迹象的情况下,我没有想过要弄明白,因为
while (fin >> points[count])
{
++count;
}
解决所有问题。