【问题标题】:Why this program doesn't give output?为什么这个程序没有输出?
【发布时间】:2015-11-15 16:06:32
【问题描述】:

就在两天前,我显然找到了使我的程序运行并正常工作的解决方案。我说显然是因为今天我正在尝试使用它,但它不再起作用了。我没有对代码进行任何更改,所以我不明白由于哪个原因 in 不再执行。 从理论上讲,这个程序应该打开一个 .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;
}

【问题讨论】:

  • 使用所有警告和调试信息编译您的程序(例如,g++ -Wall -Wextra -g,如果使用GCC....)然后使用调试器(例如gdb)来逐步运行您的程序等。
  • 文件名中真的有这么大的空格吗?如果有,它是否仍然可以从您的“当前目录”访问(因为您不使用绝对路径)。
  • 这个文件名看起来很可疑:"P01-05 tensione di vapore di riferimento fino 180°C.dat"——所有的空格都不会粘贴到这个评论中。它必须与可执行文件位于同一目录中。
  • 作为经验法则,使用较短的文件名(可能在子目录中组织)并避免文件名中的空格。

标签: c++ file-io multidimensional-array


【解决方案1】:

您的程序已编译并为我工作。没有来自您的代码的致命 stdio 消息可能意味着一切正常。我能够使所有 FATAL 消息执行。确认 dioporco.dat 没有被写入文件系统的其他位置。可能发生的情况是,当您运行程序时,“当前目录”不是您认为的那样,并且程序正在其他地方运行,因此 dioporco.dat 被写入“那里”。您也可以尝试将 dioporco.dat 更改为完全限定名称,例如“/home/myuser/dioporco.dat”。由于现在编写 open,该文件将在操作系统认为在程序执行时设置当前目录的任何位置创建。在您的文件系统中搜索 dioporco.dat,您可能会发现它已成功创建。

【讨论】:

  • 感谢您的回答。我已经应用了您的建议,但它不再提供任何输出!我真的很生气
猜你喜欢
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2023-04-09
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多