Ir para o conteúdo
  • 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<<)

Mensagens Recomendadas

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 :)

Editado por thoga31
Correcção do GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;
}

  • Voto 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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
}

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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/

Editado por pikax
  • Voto 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."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

  • Voto 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."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Editado por Bernardo Vieira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por pmg
formatacao
  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

  • Voto 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Editado por Bernardo Vieira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.