2012-01-19 3 views
3

Windows7 시스템에 cygwin을 설치했고 일부 C++ 코드를 실행하고 있습니다. 이 코드를 실행할 때 :cygwin 콘솔에 오류 또는 오류 메시지가 없습니다.

#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

"cout"은 "res7"파일을 열지 못했을 때만 호출됩니까? 'printf()'가 작동합니까? 'printf()'다음에'cout << "hello \ n";'를 추가해보십시오. (기본적으로 항상 호출됩니다.) – hmjd

답변

0

코드를 컴파일 하시겠습니까? 마지막 줄부터 세 번째 줄까지

in.close();*/ 

그러나 여는/* 태그는 없습니다. 나는 당신의 코드가 실제로 컴파일되고 당신은 새로운 .exe가 생성되도록 할 것이다. 어떤 cout이없는 오래된 .exe를 컴파일하고 실행하지 못할 수도 있습니다.

또한 예외가 발생하지 않았는지 확인하십시오. "Pop.h"소스가 누락되어 코드를 완전히 테스트 할 수 없으므로 컴파일 할 때 어떤 오류가 발생하는지 완전히 볼 수 없습니다. 프로그램의 맨 처음에 cout을 넣고 Pop.h에 소스를 제공 할 수 있습니까? 더 테스트 할 수 있습니다.

0

먼저 예외는 정보를 제공하지 않고도 프로그램을 종료 할 수 있습니다. Cygwin은 Windows와 유닉스를 결합하려는 시도이며 모든 것이 완벽하게 작동하지는 않습니다.

둘째, std::cout은 버퍼링 된 스트림입니다. 따라서 각 operator<<은 버퍼가 채워 지거나 자동으로 출력 될 때까지 명시 적으로 버퍼를 플러시하거나 cout.flush()으로 버퍼를 플러시하거나 std::endl과 같은 버퍼를 암시 적으로 플러시 할 때까지 버퍼에 추가됩니다.

따라서 디버거 또는 다른 시스템을 사용하여 버그를 찾고 수정해야합니다. 또한 다양한 플랫폼에서 테스트해야합니다. 여러 가지 다른 동작 (예 : 다른 오류 및 작동 여부 포함)이 다르게 동작합니다.