2012-01-19 56 views
3

我在我的Windows7机器上安装了cygwin,并且正在运行一些C++代码。当我运行此代码时:在cygwin控制台上没有错误或cout消息

#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中没有看到任何输出或控制台上的错误。谁能帮我?

+3

请显示一些代码。 –

+0

另外,你使用Cygwin的gcc或其他东西? – ak2

+0

只有在打开“res7”文件失败时才会调用“cout”? 'printf()'工作吗?尝试在'printf()'后面添加'cout <<“hello \ n”;(基本上它总是被调用的地方)。 – hmjd

回答

0

你确定代码编译?在第三行到最后一行,您有

in.close();*/ 

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

另外,你确定没有抛出异常吗?我无法完全测试代码,因为我错过了“Pop.h”的源代码,所以我无法完全看到编译时得到的错误。你可以尝试在你的程序的顶部有一个初始的cout,并且可能提供给Pop.h,所以我们可以对它进行更多的测试。

0

首先,一个异常可能会终止一个程序,甚至不提供信息。 Cygwin试图将windows和unix结合起来,事情并不总是完美。

其次,std::cout是一个缓冲流。因此,每个operator<<添加到缓冲区,直到缓冲区填充并自动输出,您明确地用cout.flush()刷新缓冲区,或隐式地刷新缓冲区,如std::endl将会导致。

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