2014-09-26 5 views
1

파일 :코드 출력은 모두 단자 번호를 변경 할 수 있습니다 내가 다음 코드의 정맥에, 화면에 뭔가를 변경 수를 기록하는 C++ 프로그램이

stringstream ss, ssd; ss << 0; int decs=0; ssd << decs; 

    cout << "Number "; 

    for(int i=1;i<=1000;i++) { 

     cout << ss.str() << " Decades: " << decs; cout.flush(); 

     int l=ss.str().length()+12+ssd.str().length(); 
     for(int j=0;j<l;j++) cout << "\b"; 

     this_thread::sleep_for (chrono::milliseconds(100)); 

     ss.str(""); ss << i; 

     if(i%10==0) { 
      decs++; ssd.str(""); ssd << decs; 
     } 

    } 

이 잘 작동하지만 때때로 (하지를 항상) 터미널 대신 파일에 출력을 보내고 싶습니다. 예를 들면 다음과 같습니다. ./prog > out.txt. 여기서 백 스페이스 문자 \b은 문자를 삭제하지 않지만 기호를 출력합니다 (인터넷 검색은 놀랄 일이 아닙니다).

하나의 옵션은 예를 들어 파일로 인쇄 할 때 계산 끝에서 데이터 만 출력합니다. 그러나 이것은 터미널/파일을위한 다른 코드를 필요로 할 것이다. 예를 들어 입력 매개 변수로 바꾸면된다. 터미널/파일 출력을위한 별도의 코드없이이 작업을 수행 할 수있는 방법이 있습니까? 나는 전체 문자열마다 작성 7.

+3

나는 슬립 함수 나 C++ 11 스레드 대기를 쓸모없는 계산 대신 사용하려고합니다./ –

+0

정확하게 파일에 쓰고 싶은 것이 무엇입니까? 예를 들어주세요. – Quest

+0

정확히 어떤 문제입니까? "백 스페이스가 같은 방식으로 작동하지 않는다"는 것은 무엇을 의미합니까? 'string '의'.str' 멤버 함수를 사용하여'cout'과'ofstream'에 모두 쓸 수 있어야합니다. – vsoftco

답변

1

가능한 해결 방법은 최종 결과에 대해, 중간 결과 ('\b' 등의 경우)에 대한

std::coutstd::cerr을 사용할 수있다.

2

시도 Windows에서 Cygwin에서 사용하고 당신이 파일의 최대 출력을해야합니다 단지 '\r'이 경우 '\n'

stringstream ss, ssd; ss << 0; int decs=0; ssd << decs; 

for(int i=1;i<=1000;i++) { 

    cout << "Number " << ss.str() << " Decades: " << decs; cout.flush(); 

    //int l=ss.str().length()+12+ssd.str().length(); 
    //for(int j=0;j<l;j++) cout << "\b"; 
    cout << '\r'; 

    this_thread::sleep_for (chrono::milliseconds(100)); 

    ss.str(""); ss << i; 

    if(i%10==0) { 
     decs++; ssd.str(""); ssd << decs; 
    } 

} 

없이 작성

.

+0

감사! 이 방법이 효과적 일지는 모르겠지만 마지막 줄뿐만 아니라 출력 파일에서 모든 것을 얻을 수 있습니다. 후자를 얻을 수있는 방법이 보이십니까? – jorgen