감안할 코드 :왜 재귀 작업에서 std :: ofstream이 예상대로 작동하지 않았습니까? 아래
int recur(int num);
int main()
{
recur(5);
return 0;
}
int recur(int num)
{
static unsigned count = 0;
//static
std::ofstream log("log.txt",std::ios_base::app|std::ios_base::out);
std::cout << count << "\n";
log << count << "\n";
++count;
if (num==0) return 0;
num += recur(num -1);
return num;
}
출력 std::cout
에서 : log.txt
의
0
1
2
3
4
5
내용 : 왜 그렇게처럼
5
4
3
2
1
0
입니까?
recur
에 주석으로 표시된 것과 마찬가지로 static
을 std::ofstream
앞에 넣으려고했습니다. 그렇다면 정확히 작동했는데 정확히 std::cout
의 결과와 동일합니다. 아무도 후드 아래의 논리를 설명 할 수 있습니까?
'log'가 삭제되면 텍스트가 파일에 저장됩니다. 그들은 역순으로 파괴됩니다. 'std :: cout'은 전체 프로그램에 사용됩니다. – chris
또한, 일부 구현에서는'\ n'마다 'cout'을 플러시하지만 파일 스트림은 플러시하지 않습니다. '<< '\ n' '뒤에'<< std :: flush'를 추가하거나'<<'\ n "대신에 << << std :: endl >>을 사용하면'log'에 대한 원래 출력 순서를 복구해야합니다. – celtschk
@chris'log'가 파기되기 전에 파일에 아무것도 쓰지 않았습니까? –