输入元素不同于C++文件的输出元素

输入元素不同于C++文件的输出元素,c++,arrays,file-io,C++,Arrays,File Io,我的代码有一些问题。我被要求将.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

我的代码有一些问题。我被要求将.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,而负数变为正数。有人知道为什么会这样吗

当您从文件中读取数字时,您将其提取为word,然后将其存储为点。word是一个整数,points是双精度的,这会给您带来意外的行为。编译器应该就此向您发出警告

int word;
对你没有好处。首先,它是一个整数,所以fin>>word只读取输入的整数部分。5.675207应理解为5。.675207保留在fin>>points[count]的文件流中。单词不会存储在任何位置,5将被丢弃,但.675207仍以0.675207的点数[0]存在

我没有费心去弄清楚负面信号的去向,因为

while (fin >> points[count])
{
    ++count;
}

修复所有问题。

您应该学习如何使用调试器并逐步完成代码。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现您的问题的示例,以及您在调试器中所做的观察。您正在从流中读取两次项,交替为word和points[计数]我还应该指出,他从fin那里读了两遍,这几乎不是他想要的。我把“word”改成了“double”,但我把所有其他元素都放进了我的文件中。它还不断地将小数点前的第一个数字改为0
while (fin >> points[count])
{
    ++count;
}