就在两天前,我显然找到了让我的程序运行正常的解决方案。我说显然是因为今天我正在尝试使用它,但它不再起作用了。我没有对代码进行任何更改,所以我不明白为什么不再执行。 这个程序应该打开一个.dat文件,读取并解析它只提取我需要的列,在这种情况下是第二个。一旦从列中取出,它将使用数组通过一组120个元素计算数据的平均值。 两天前它工作正常,今天它没有给出任何输出,调试功能没有显示任何错误。 代码是这样的:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
#define FATAL(MSG) do { \
std::cerr << "Errore: " << MSG << '\n'; \
exit(1); \
} while (false)
int main()
{
std::ifstream fin ("P01-05 tensione di vapore di riferimento fino 180°C.dat");
if (fin.is_open())
{
std::ofstream fout("tmean.dat");
if (fout.is_open())
{
fout << "Tmean\n";
std::string line;
while (getline(fin, line))
{
const int group_size = 120;
double temp[group_size];
double total = 0;
for (int i=0; i < group_size; ++i)
{
if (getline(fin, line))
{
std::istringstream ss(line);
double time;
if (ss >> time >> temp[i])
total += temp[i];
else
FATAL("unable to parse 2 doubles from line '"
<< line << "' for [" << i << ']');
}
else
// will rarely happen after checking !eof()
FATAL("failed to read needed line from file for ["
<< i << ']');
}
double tmean = total / group_size;
fout << tmean << '\n';
}
}
else
FATAL("could not open output file.");
fout.close();
}
else
FATAL("non si puo aprire il file.");
fin.close();
return 0;
}
答案 0 :(得分:0)
您的程序已编译并为我工作。来自您的代码的致命stdio消息的缺失可能意味着一切正常。我能够导致所有FATAL消息执行。确认未在文件系统上的其他位置写入dioporco.dat。可能发生的事情是,当你运行程序时,“当前目录”不是你想象的那样,程序正在其他地方运行,因此dioporco.dat正在写“那里”。您也可以尝试将dioporco.dat更改为完全限定的名称,例如“/home/myuser/dioporco.dat”。当现在写入open时,将在操作系统认为程序执行时设置当前目录的任何地方创建该文件。在您的文件系统中搜索dioporco.dat,您可能会发现它已成功创建。