Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Bernardo Vieira

Qual a diferença? (printf e cout<<)

Recommended Posts

Bernardo Vieira

bem, eu sou novo no que toca a C, (mas faz 3 anos que uso pawn, e é igual, até as funcoes sao iguais) e entao decidi começar a estudar, porque ao que eu leio, fico fascinado com o poder desta linguagem e definitivamente pretendo investiver nela, alias, á ja algum tempo que começei, mas eu fiquei com umas duvidas. Ás vezes vou procurar um tutorial ou um pequeno codigo ou explicaçao de determinada funcao e eu encontrei uma coisa e gostava que me explicassem.

Qual é a diferença entre um e o outro? Eu sei que o primeiro so pode ser usado se eu for usar c++, em c nao é possivel isso, mas, qual a diferença? Existem muitas mais diferencas? Tambem sei que c++ é evolucao de c e a nivel grafico tem coisas que c nao tem, mas nao é por ai que quero entrar, é mesmo perceber qual é a diferença!

em c++

#include <stdio.h>
#include <iostream>

using namespace std;

int main() {
    cout << "Ola mundo!" << endl;
    system("pause");
}

em c

#include <stdio.h>

main() {
    printf("Ola mundo!");
    system("pause");
}

desde ja fico agradecido :)

Edited by thoga31
Correcção do GeSHi

Share this post


Link to post
Share on other sites
pmg

Basicamente o std::cout tem um controle de tipos mais seguro que o printf().

Mau programa em C (que nao é possivel asneirar da mesma forma com cout)

#include <stdio.h>

int main(void) {
   int foo = 42;
   printf("%f", foo); /* %f espera um double, mas foo é um int! */
   return 0;
}

  • Vote 1

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Bernardo Vieira

hmm ok, e se nesse caso eu usa-se cout em vez de printf e a condicao fosse igual "%f espera um double, mas foo é um int!"

o que acontecia ? o mesmo que se estiver a usar printf ?

Share this post


Link to post
Share on other sites
pmg

Eu nao sei C++.

Suponho que o codigo de exemplo que eu usei seria convertido **e corrigido** para C++ usando o cout assim

#include <iostream>

int main() {
   int foo = 42;
   std::cout << foo; // imprime foo correctamente
}

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pedrotuga

A diferença maior é mesmo o estilo. Um é uma função com o efeito colateral de escrever no ecrã, outro é uma expressão que usa o operador '<<' para enviar dados para a stream de output.

Em teoria, o programa o primeiro exemplo não tem efeitos-colaterais, o que acontece à stream 'cout' não é da responsabilidade do programa e a sintaxe é clara nesse aspecto. Já o segundo, olhas para uma chamada de uma função que não te devolve nenhuma informação. Ou seja, se não soubesses o que a função printf() faz, ficavas confuso.

É um detalhe teórico.

  • Vote 1

Share this post


Link to post
Share on other sites
Bernardo Vieira

hmm, estou a ver, acho que entendi, bem, obrigado, vou continuar por aqui, experiementar mais algumas coisas a ver se percebo melhor isso, eu ja tinha lido sobre o operador << so que nao entendi lá grande coisa.

bem, obrigado :)

aos dois

Share this post


Link to post
Share on other sites
pikax

o Operador "<<" no cout(que e' derivado do ostream) e' um overload do operador para alguns tipos de C++ e uns objectos.

O operador "<<" no ostream implementa estas funcoes:

//member functions
ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (const void* val);

ostream& operator<< (streambuf* sb);

ostream& operator<< (ostream& ( *pf )(ostream&));
ostream& operator<< (ios& ( *pf )(ios&));
ostream& operator<< (ios_base& ( *pf )(ios_base&));

//global functions

ostream& operator<< (ostream& out, char c );
ostream& operator<< (ostream& out, signed char c );
ostream& operator<< (ostream& out, unsigned char c );

ostream& operator<< (ostream& out, const char* s );
ostream& operator<< (ostream& out, const signed char* s );
ostream& operator<< (ostream& out, const unsigned char* s );

podes ter mais informacoes neste link: http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/

Edited by pikax
  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Bernardo Vieira

ah espera, agora acho que ja percebi mais qualquer coisinha, obrigadao :)

já agora, digam-me uma coisa, que IDE é que usam para desenvolver em c/c++ ? é que eu uso uma versao portatil do dev-c++ porque a ultima versao do dev-c++ da um erro qualquer e a antiga nao sei porque nao quer funcionar, entao consegui uma versao portatil, mas no caso, ela nao me carrega coisas como "std::cout", a menos que eu use "using namespace std;" nem "std:stoi" (tava a experimentar uma coisa com essa funcao, mas nao carrega...)

e eu estou a usar

#include <iostream>
#include <string>

pelo que eu sei tinha de carregar com a include ...

tambem tenho aqui no pc o Visual Studio C++ Express 2010, mas com ele a opcao de compilar esta desabilitada...estou agora a baixar um eclipse, mas mesmo assim gostava que me dissessem o que usam, talvez eu nao esteja certo do que estou a usar! :confused:

Share this post


Link to post
Share on other sites
pikax

a IDE que uso para compilar um ficheiro e' o Code::Blocks.

Como e' que nao carrega? tens a localizacao certa no compilador da pasta dos includes do std?

  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Bernardo Vieira

bem...eu acho que sim, pelo menos, quer no instalado quer no portatil as pastas e tudo é igual ...

o erro é "stoi is not a membre of std", mas eu tenho de usar std::stoi(params), acho eu ...

bem, obrigado, ja baixei, vou experimentar

@edit

mas nao stresses com isso, por agora estou só pelo C, nao estou a pensar ir para C++, pelo menos por agora, por isso nao te rales, sem stress, e obrigado :)

Edited by Bernardo Vieira

Share this post


Link to post
Share on other sites
mogers

Verifica se o teu compilador suporta o C++11. Essa função foi adicionada na última versão do standard da linguagem.

http://en.cppreference.com/w/cpp/string/basic_string/stol

Defined in header <string>

int stoi(const std::string& str, size_t *pos = 0, int base = 10); (since C++11)

Verifica se o teu compilador suporta o C++11. Essa função foi adicionada na última versão do standard da linguagem.

Edited by pmg
formatacao
  • Vote 1

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Share this post


Link to post
Share on other sites
pmg
que IDE é que usam para desenvolver em c?

Eu nao uso um IDE.

Para editar ficheiros source, dependendo do computador onde estou, uso vim, Notepad++, ou ate o Notepad.

Para compilar C, uso normalmente o gcc (em Windows uma versao MinGW facil de instalar); tambem uso clang, tcc, Visual Studio (quando tenho paciencia) ...

Para debugging uso o gdb (mais propriamente o cgdb), e valgrind. Se tiver o Visual Studio aberto (o que é muito raro) tambem uso o debugging dele.

  • Vote 1

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Bernardo Vieira

Verifica se o teu compilador suporta o C++11. Essa função foi adicionada na última versão do standard da linguagem.

http://en.cppreference.com/w/cpp/string/basic_string/stol

Verifica se o teu compilador suporta o C++11. Essa função foi adicionada na última versão do standard da linguagem.

sim, eu apercebi-me da diferenca entre o c++11 e c++98 se nao me engano, mas como é que sei que tenho o c++ 11?

Eu nao uso um IDE.

Para editar ficheiros source, dependendo do computador onde estou, uso vim, Notepad++, ou ate o Notepad.

Para compilar C, uso normalmente o gcc (em Windows uma versao MinGW facil de instalar); tambem uso clang, tcc, Visual Studio (quando tenho paciencia) ...

Para debugging uso o gdb (mais propriamente o cgdb), e valgrind. Se tiver o Visual Studio aberto (o que é muito raro) tambem uso o debugging dele.

bem...tenho muito que aprender ainda o.O

obrigado :)

Edited by Bernardo Vieira

Share this post


Link to post
Share on other sites
mogers

sim, eu apercebi-me da diferenca entre o c++11 e c++98 se nao me engano, mas como é que sei que tenho o c++ 11?

Penso que o melhor é procurar na net se os responsáveis pelo compilador descrevem o seu suporte do c++11. Ao procurar no caso do VS 2010 express encontrei estas páginas por exemplo:

http://stackoverflow.com/questions/2936757/what-c11-features-does-visual-studio-2010-support

http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx

Esta segunda penso que se refere às versões intermédias do standard c++11

  • Vote 1

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.