Denis Bittencourt Muniz Postado Maio 11, 2006 Denunciar Share Postado Maio 11, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 12, 2006 Denunciar Share Postado Maio 12, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Bittencourt Muniz Postado Maio 12, 2006 Autor Denunciar Share Postado Maio 12, 2006 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.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 12, 2006 Denunciar Share Postado Maio 12, 2006 Acredito que seja porque ele vai procurar pela precedência de operadores "antes" da função printf.Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 13, 2006 Denunciar Share Postado Maio 13, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Agosto 29, 2006 Denunciar Share Postado Agosto 29, 2006 mas executa de tras pra frente sim. porque: int n = 5; printf("%d %d %d", n++, n, n--);[/code] retorna4 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++);retorna6 5 5porque, 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Agosto 30, 2006 Denunciar Share Postado Agosto 30, 2006 mas executa de tras pra frente sim. porque: int n = 5; printf("%d %d %d", n++, n, n--); retorna4 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++); retorna6 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 5Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Agosto 30, 2006 Denunciar Share Postado Agosto 30, 2006 estranho, o Turbo C++ volta 6 6 5, mas o C++ do Visual Studio 2003 ou do 2005 volta 6 5 5. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Denis Bittencourt Muniz
Olá galera!
Apenas curiosidade: *Por que* 'printf' as vezes lê o último argumento primeiro?
Um exemplo que eu vi:
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
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.