Ir para conteúdo
Fórum Script Brasil
  • 0

'printf'


Denis Bittencourt Muniz

Pergunta

Olá galera!

Apenas curiosidade: *Por que* 'printf' as vezes lê o último argumento primeiro?

Um exemplo que eu vi:

printf("%d %d %d", n, n + 1, n++);

No caso 'n++' seria lido primeiro... Falows!!! C/C++, mundo louco.. huahuhau

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Não, Denis, ele não pega o último como o primeiro. Ele faz perfeitamente certo. E a prova disso é o segundo (n + 1). Não sei se você sabe, mas quando você faz n++ é retornado o valor de "n" atual e é incrementado mais um *depois* do retorno. Por esta razão é que existe o ++n que incrementa primeiro para depois retornar (ou seja, retorna já incrementado). Portanto, dê uma olhada nisso:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n = 5;
    printf("%d %d %d\n", n, n + 1, n++);
    system("pause");
}
No caso acima, n++ vai retornar 5 (porque é o valor de n) e n vai passar a ser 6, logo n+1 vai ser 7. Portanto, aquela linha ali é o equivalente a:
 printf("%d %d %d\n", 6, 7, 5);

Faça o teste com ++n e você verá a diferença.

Portanto, não existe nada de "louco" nisso.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Bom... pelo que entendi, 'printf' faz a leitura de todos os argumentos ao mesmo "tempo", digamos... só essa teoria que consegui encontrar...

Espero respostas quanto essa minha afirmação..

Link para o comentário
Compartilhar em outros sites

  • 0
Bom... pelo que entendi, 'printf' faz a leitura de todos os argumentos ao mesmo "tempo", digamos... só essa teoria que consegui encontrar...

Não só printf, como qualquer outra instrução em qualquer outra linguagem. Se você tem variáveis e/ou cálculos você tem que desenvolver seus valores antes de mostrá-los. E isso vale para qualquer situação. Qualquer informação de entrada gera uma única saída. Dê uma olhada no meu post anterior quando eu mostro a linha que equivale ao código que você mostrou. Após desenvolver os valores das expressões contidas no código e exatamente aquela linha que será executada (é claro que ela poderá gerar algum outro tipo de valor[es] até que se chegue no resultado esperado - ou seja, a escrita na tela).

Por que quando você manda imprimir 2+5 o resultado mostrado é 7? Porque ele desenvolveu a expressão antes de imprimir. É exatamente isso que ocorre ali em cima, e *não* é uma particularidade de printf.

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

mas executa de tras pra frente sim. porque:

    int n = 5;
    printf("%d %d %d", n++, n, n--);[/code] retorna
4 5 5
ou seja, ele faz primeiro o n-- e depois o n++ do mesmo jeito que
[code]    int n = 5;
    printf("%d %d %d", n--, n, n++);

retorna

6 5 5

porque, o ++ ou o --, mudam o valor diretamente na variavel, certo. e não so faz o calculo na hora de mostrar. ou seja, nos dois casos que eu passei, ele executa primeiro o calculo que eu pus por ultimo no printf.

Link para o comentário
Compartilhar em outros sites

  • 0

mas executa de tras pra frente sim. porque:

    int n = 5;
    printf("%d %d %d", n++, n, n--);
retorna
4 5 5
ou seja, ele faz primeiro o n-- e depois o n++ do mesmo jeito que
    int n = 5;
    printf("%d %d %d", n--, n, n++);
retorna
6 5 5
porque, o ++ ou o --, mudam o valor diretamente na variavel, certo. e não so faz o calculo na hora de mostrar. ou seja, nos dois casos que eu passei, ele executa primeiro o calculo que eu pus por ultimo no printf.
Aí pode ser uma questão de precedência de operadores (talvez -- seja executado antes de ++). Porém, os resultados aqui foram diferentes:
    int n = 5;
    printf("%d %d %d", n++, n, n--);
Resultou em: 4 4 5
    int n = 5;
    printf("%d %d %d", n--, n, n++);

Resultou em: 6 6 5

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...