Fscanf

5 respostas
C

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

5 Respostas

E

Quando você faz:

while(fscanf(f, "%s", str))

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.

E

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:

int valorBooleano = !! algumacoisa();

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

C

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… :XD:
explica mais?

E

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?

E

cake:
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.

Criado 30 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 5
Participantes 2