【问题标题】:No error or cout messages on cygwin consolecygwin 控制台上没有错误或 cout 消息
【发布时间】:2012-02-14 06:28:41
【问题描述】:

我在我的 Windows7 机器上安装了 cygwin,并且正在运行一些 c++ 代码。当我运行这段代码时:

#include <iostream>
#include <string>
#include <fstream>
#include <time.h>
#include <math.h>
#include "Pop.h"
using namespace std;


int main() {
  ifstream in;
  ofstream out;
  cout << "something";
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "1\n";
  else
    cout << "unable to open res7 file";
  out.close();
  int seed = time(NULL);
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "2\n";
  else
    cout << "unable to open res7 file";
  out.close();
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "seed " << seed << '\n';
  else
    cout << "unable to open res7 file";
  out.close();
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "3\n";
  else
    cout << "unable to open res7 file";
  out.close();
  srand (seed);
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "4\n";
  else
    cout << "unable to open res7 file";
  out.close();
  double parameters[4];
  int location;
  in.open("input7.txt", ios::in);
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "5\n";
  else
    cout << "unable to open res7 file";
  out.close();
  return 0;
}

我在控制台上看到了一个输出(一些东西)。但是当我运行我的完整代码时:

#include <iostream>
#include <string>
#include <fstream>
#include <time.h>
#include <math.h>
#include "Pop.h"
using namespace std;


int main() {
  ifstream in;
  ofstream out;
  cout << "something";
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "1\n";
  else
    cout << "unable to open res7 file";
  out.close();
  int seed = time(NULL);
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "2\n";
  else
    cout << "unable to open res7 file";
  out.close();
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "seed " << seed << '\n';
  else
    cout << "unable to open res7 file";
  out.close();
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "3\n";
  else
    cout << "unable to open res7 file";
  out.close();
  srand (seed);
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "4\n";
  else
    cout << "unable to open res7 file";
  out.close();
  double parameters[4];
  int location;
  in.open("input7.txt", ios::in);
  out.open("res7.txt", ios::out|ios::app);
  if (out.is_open())
    out << "5\n";
  else
    cout << "unable to open res7 file";
  out.close();
     if (in.is_open()) {
    out.open("res7.txt", ios::out|ios::app);
    if (out.is_open())
      out << "6\n";
    else
      cout << "unable to open res7 file";
    out.close();
    char line[256];
    while (!in.getline(line, 256).eof()) {
      out.open("res7.txt", ios::out|ios::app);
      if (out.is_open())
    out << "7\n";
      else
    cout << "unable to open res7 file";
      out.close();
      char *input = strtok(line, " ");
      int i=0;
      while (input!=NULL) {
    out.open("res7.txt", ios::out|ios::app);
    if (out.is_open())
      out << "8\n";
    else
      cout << "unable to open res7 file";
    out.close();
    parameters[i] = atof(input);
    input = strtok(NULL, " ");
    i++;
      }
      int rnum = rand();
      location = rnum%10000;
      out.open("res7.txt", ios::out|ios::app);
      if (out.is_open())
    out << "9\n";
      else
    cout << "unable to open res7 file";
      out.close();
      Pop p(parameters[0], parameters[1], 0.2, 0.1, parameters[2], location);
      out.open("res7.txt", ios::out|ios::app);
      if (out.is_open())
    out << "10\n";
      else
    cout << "unable to open res7 file";
      out.close();
      double L = exp(-parameters[3]);
      double FF_mean = p.FF_steady(parameters[3], L, 0.0);
      out.open("res7.txt", ios::out|ios::app);
      if (out.is_open())
    out << "11\n";
      else
    cout << "unable to open res7 file";
      out.close();
      out.open("res7.txt", ios::out|ios::app);
      if (out.is_open()) {
    out << "number of chromosomes is " << p.all_population[0]->ga->chromosome << "  alpha is " << parameters[2] << "  cost is " << parameters[1];
    out << "  a is " << parameters[0] << "  u is " << parameters[3] << "  location is " << location << "  FF steady is " << FF_mean << '\n';
      }
      else
    cout << "unable to open res7 file FF";
      out.close();
      out.open("res7.txt", ios::out|ios::app);
      if (out.is_open())
    out << "12\n";
      else
    cout << "unable to open res7 file";
      out.close();
      if (FF_mean>0.1) {
    out.open("res7.txt", ios::out|ios::app);
    if (out.is_open())
      out << "13\n";
    else
      cout << "unable to open res7 file";
    out.close();
    p.insert_O(0.05);
    out.open("res7.txt", ios::out|ios::app);
    if (out.is_open())
      out << "14\n";
    else
      cout << "unable to open res7 file";
    out.close();
    double total_mean = p.steady(parameters[3], L, 0.0);
    double perc = p.perc_O();
    out.open("res7.txt", ios::out|ios::app);
    if (out.is_open())
      out << "total steady is " << total_mean << "   perc O is " << perc << '\n';
    else
      cout << "unable to open res7 file";
    out.close();
      }
    }
  }
  else
    cout << "Unable to open input7 file\n";
    in.close();
  return 0;
}

我在控制台上看不到任何输出。当我在另一台机器上运行代码时,我看到我有一个浮点异常。我想我可以找到它在哪里,但我不明白为什么我在 cygwin 的控制台上看不到任何输出或错误。谁能帮帮我?

【问题讨论】:

  • 另外,您使用的是 Cygwin gcc 还是其他?
  • cout 只有在打开“res7”文件失败时才被调用? printf() 有效吗?尝试在printf() 之后添加cout &lt;&lt; "hello\n"; (基本上它总是会被调用)。
  • 您可以尝试将代码简化为简单的cout &lt;&lt; "Hello, world!" 吗?该测试的结果应该对我们有所帮助。

标签: c++ cygwin iostream


【解决方案1】:

您确定代码可以编译吗?在倒数第三行你有

in.close();*/

但是,没有打开 /* 标记。我会确保您的代码实际上正在编译并且您生成了一个新的 .exe。您可能无法编译和运行没有任何 cout 的旧 .exe。

另外,你确定没有抛出异常吗?我无法完全测试代码,因为我缺少“Pop.h”的源代码,所以我无法完全看到编译时出现的错误。您能否尝试在您的程序顶部设置一个初始 cout,或者提供 Pop.h 的来源,以便我们进行更多测试。

【讨论】:

    【解决方案2】:

    首先,异常可能会在不提供信息的情况下终止程序。 Cygwin 是尝试将 windows 和 unix 结合起来,但事情并不总是完美的。

    其次,std::cout 是一个缓冲流。因此,每个operator&lt;&lt; 都会添加到缓冲区,直到缓冲区填满并自动输出,您使用cout.flush() 显式刷新缓冲区,或隐式刷新缓冲区,例如std::endl 将导致。

    因此,您需要使用调试器或其他系统来查找错误并修复它。您还需要在多个平台上进行测试,因为事情在不同的平台上表现不同——包括不同的错误,甚至看起来可以工作。

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多