Pergunta

Mais uma vez, meu professor não conseguiu responder à minha pergunta. Eu sabia quem seria capaz de ...

Então, eu nunca aprendi realmente C. em C ++, obviamente eu usaria uma declaração Cout o tempo todo. Em uma tarefa recente, meu professor nos disse para colocar

setbuf( stdout , NULL );

Na parte superior de Main (), a fim de obter uma saída não afiada, permitindo -nos ver a saída corretamente.

Minha pergunta é a seguinte: esta declaração afetará uma declaração cout ou simplesmente uma declaração printf () que eu chamo?

Desde já, obrigado!

Foi útil?

Solução

Por padrão, iostreams e stdio são sincronizados. Referência.

Isso não significa que ajustar manualmente o buffer do stdio é uma boa ideia! Você pode querer utilizar std::endl ou std::flush (a partir de <ostream>), o que pode ajudá -lo. por exemplo,

std::cout << "Hello, world!" << std::endl;

ou

std::cout << "Hello, world!\n" << std::flush;

Ambos fazem a mesma coisa. (std::endl = Imprimir linha de extremidade, depois descarregar.)

Outras dicas

Por padrão, se o stdout ou o cout estiver imprimindo em um console, a saída será buffer de linha. Isso significa que toda nova linha impressa liberará a saída. Você pode chamar explicitamente Flush () sempre que quiser substituir o comportamento, por caso, digamos, a saída será redirecionada para um arquivo e você deseja usar a cauda -F e precisar de determinadas saídas em tempo real.

Como Chris disse, sync_with_stdio deve amarrar o stdout não bosgo com um cout não bosgo (por padrão), mas se tudo o que você está fazendo é usar o cout, em vez de usar o setBuf no stdout, uma opção melhor é usar PubSetBuf no ponteiro devolvido por rdbuf. ou seja:

// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);

Outra função que pode ser interessante de se ver é gravata.

Geralmente, quando é importante ver a saída imediatamente, estamos falando de rotina financeira complexa altamente confiável que deve registrar uma transação até o disco rígido antes de enviá-lo para a contraparte. Ou, (muito mais comum), queremos ver mensagens de depuração, mesmo quando o programa estiver travando.

Como você está estudando, assumirei que você está lidando com o segundo caso. Nesse caso, meu conselho seria usar o Stderr em vez de stdout. É inufrado por padrão e você pode redirecioná -lo separadamente do stdout, colocando sua saída em um só lugar e seu log em outro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top