2013-01-02 2 views
1

다음 명령을 사용하여 프로그램을 실행하고 있습니다. ./myProgram -i test.in -o test.outCout과 Cin을 리디렉션하는 방법은 무엇입니까?

두 파일 모두 합법적이며 존재합니다.

// run all over the arguments and set the cin and cout if needed 
for (int i = 1; i < argc; i= i+2) 
{ 
    int j = i+1; 

    // loop over each pairs of arguments 
    do 
    { 
     // set cin 
     if(argv[i] == "-i") 
     { 
      static std :: ifstream s_inF(argv[j]); 
      std :: cin.rdbuf(s_inF.rdbuf()); 
      break; 
     } 

     //set cout 
     if(argv[i] == "-o") 
     { 
      std::ofstream out(argv[j]); 
      std::cout.rdbuf(out.rdbuf()); 
      break; 
     } 

     // in order to search for the other case 
     // (example:X.out -i) 
     int temp = i; 
     i = j; 
     j = temp; 
    }while(i>j); 
} 

나는 char **argv에 따라 cincout를 리디렉션하기 위해 main이 블록을 썼다. cin은 정상적으로 작동하지만 cout은 작동하지 않습니다.

// run all over the arguments and set the cin and cout if needed 
for (int i = 1; i < argc; i= i+2) 
{ 
    int j = i+1; 

    // loop over each pairs of arguments 
    do 
    { 
     // set cin 
     if(argv[i] == "-i") 
     { 
      static std :: ifstream s_inF(argv[j]); 
      std :: cin.rdbuf(s_inF.rdbuf()); 
      break; 
     } 

     //set cout 
     if(argv[i] == "-o") 
      break; 

     // in order to search for the other case 
     // (example:X.out -i) 
     int temp = i; 
     i = j; 
     j = temp; 
    }while(i>j); 
} 

std::ofstream out(argv[4]); 
std::cout.rdbuf(out.rdbuf()); 

가 어떤 문제를 일으키는 : 작동 그렇게 은 내가 촬영하면?

+0

나는 정적 !!!!!!!!!을 잊어 버렸다. 미안하지만 왜 우리가 cin과 main을 다른 기능으로 설정해야하는지 왜 말할 수 있습니까? –

답변

3

그 스트림 버퍼는 std::cout에 설치 스트림 버퍼를 설치 한 후 바로 파괴됩니다 스트림은 :

std::ofstream out(argv[j]); 
std::cout.rdbuf(out.rdbuf()); 

첫 번째 줄은

static std::ofstream out(argv[j]); 

다른 오류가있을 수 있습니다 읽을 필요가 있지만, 이것은이다 내가 목격 한 것.

+0

예, 이것을 알아냅니다. 고맙습니다 !! –

0

출력이 작동하도록 재 지정하는 데 j가 i+1이되어야하므로 작동하지 않습니다. 시도 해보십시오. 첫 번째 샘플에 -o을 먼저 건 다음 -i을 처음에 통과하면 어떻게됩니까?

변경이 : 여기에

 int temp = i; 
     i = j; 
     j = temp; 

는 :

 int temp = i; 
     i = j; 
     j = temp + 1; 

또한 동안의 조건에서 작동해야합니다.

그런데 왜 j이 필요합니까? 당신은 i로만 그것을 할 수 있고 리다이렉션을 위해 i + 1을 사용합니다. 나는 이것이 또한 코드를 이해하기 쉽게 만들 것이라고 믿는다.

+0

정적은 어떨까요? –

+0

왜 작동합니까? 왜냐하면 출력에 사용 된 인수의 인덱스가 4로 고정되어 있기 때문입니다. 반면 이전 코드에서는 다른 값을 갖습니다. 또한 코드를 디버그하여 내 뜻을 이해하도록 시도 할 수도 있습니다. –

관련 문제