fscanf  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
cake
JavaTeenager

Membro desde: 23/08/2010 15:31:20
Mensagens: 169
Offline

fscanf retorna 1 se conseguir ler uma string, e 0 ou menor que 0, em caso contrário, certo?

E pq meu código trava quando uso



ao invés de

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Quando você faz:



e fscanf encontra o final do arquivo, ele retorna EOF, que é um valor diferente de 0. Como o while entende que true = diferente de zero, e false = zero, então ele vai realmente ficar travado.

Use "while (fscanf (.....) > 0)" e pare de inventar coisas. Não há absolutamente nenhuma diferença, em termos de CPU, entre a comparação para saber se é positivo ou se é diferente de zero.
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Em C ou C++ evite a todo custo fazer este tipo de comparação:

"while (alguma coisa == true)" / "if (alguma coisa == true)"

ou

"while (alguma coisa == false)" / "if (alguma coisa == false)".

Isso é porque esse "alguma coisa" pode retornar 0 (que é FALSE mesmo) ou então alguma coisa que não é zero (em C e C++, o "if" e o "while" entendem como true).

É melhor usar:

while (alguma coisa)
if (alguma coisa)

e

while ( ! alguma coisa)
if ( ! alguma coisa)

Lembrem-se de deixar espaços na frente e atrás do "!" para que ele fique bem destacado.

Mais um detalhinho, se você realmente precisa de 0 = false e 1 = true, pode usar este truque:


!! transforma 0 (FALSE) em 0 mesmo, e qualquer coisa diferente de 0 em 1 (TRUE).

cake
JavaTeenager

Membro desde: 23/08/2010 15:31:20
Mensagens: 169
Offline

ih, manim... eu pensava que valores menores que 0 eram considerados FALSE tb.
vlw pelas dicas, especialmente a de destacar os !

essa de usar !! eu não entendi...
explica mais?

This message was edited 2 times. Last update was at 30/11/2010 18:13:51

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Pois é. Um ! transforma o 0 em 1, e qualquer coisa que não é 0 em 0.

Quando você encadeia dois ! !, então você tem algo assim:

! 0 -> 1
!! 0 -> ! 1 -> 0

! 1 -> 0
! 2 -> 0
! (-20) -> 0
! ! 1 -> ! 0 -> 1
! ! 2 -> ! 0 -> 1
! ! (-20) -> ! 0 -> 1

OK?
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

cake wrote:ih, manim... eu pensava que valores menores que 0 eram considerados FALSE tb.


Em uma linguagem muito famosa (VB) o valor FALSE é 0, mas o valor TRUE é (-1), que é menor que 0. Esquisito, não? Mas é verdade.
 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team