c++

prosaQue

Power Member
Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, World!";
    return 0;           
}

Ao executar, o programa corre e fecha-se automaticamente. Nem consigo ter tempo para ver o se realmente faz o output. Alguma função que resolva isto ? :D
 
Última edição:
Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, World!";
    [COLOR=red]getchar();[/COLOR]
    return 0;           
}
 
Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    cout<< "Introduza um numero, para terminar digite 0." ;
    int n;
    int maior;
   cin >> n;
   maior = n ;
    do{
         cin >> n ; 
         if( n > maior )
             maior = n; 
        }
    while(n!= 0);
    

    cout << " O maior numero e: "; 
    cout << maior;   
    
    getchar();
    return 0;           
}

Ao correr este código, o programa encerra logo após o ciclo, não tenho tempo de ver o ouput seguinte. Alguma solução ?:)
 
Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
    cout<< "Introduza um numero, para terminar digite 0." ;
    int n;
    int maior;
   cin >> n;
   maior = n ;
    do{
         cin >> n ; 
         if( n > maior )
             maior = n; 
        }
    while(n!= 0);
    

    cout << " O maior numero e: "; 
    cout << maior;   
    
    getchar();[COLOR=red]getchar();[/COLOR]
    return 0;           
}
ou

Código:
void limpa_buffer()
{
  char c;
  do
  {
    c=getchar();
  } while(c!='\n');
}

...
limpa_buffer();
cout << " O maior numero e: "; 
    cout << maior;   
    
    getchar();
    return 0;           
}
 
Última edição:
Boas.
Ando a aprender C++ na escola...Parece uma Linguagem de programação Simples com alguams semelhanças ao Pascal! :D Pode ser so impressão minha! xD
Não posso falar muito ainda pois estou no básico ainda!...
Fiquem Bem
 
Boas.
Ando a aprender C++ na escola...Parece uma Linguagem de programação Simples com alguams semelhanças ao Pascal! :D Pode ser so impressão minha! xD
Não posso falar muito ainda pois estou no básico ainda!...
Fiquem Bem

?!

quanto à questao ja tentaste o debugger? podes tar com algum problema e nao te estas a aperceber, provavelmente nem esteja a chegar ao getchar.
 
mas porque não corres os teus programas directamente na linha de comandos do windows, assim já não "aparecem e desaparecem"

é muito mais prático correr através do ide. Posso fazer o debug, e posso corrigir muito facilmente possíveis erros. Por isso acho um pouco "rupestre" andar a correr os programas na linha de comandos :-D

dois? porquê dois? mais vale fazer:

fflush(stdin);
getchar();

Exacto. Desta maneira funcionou. Obrigado :)
 
Última edição pelo moderador:
Bem o problema que o prosaQue teve é devido ao facto do buffer estar já preenchido com uma certa quantidade de caracteres que inviabiliza a escrita ou leitura. É como se o buffer estivesse demasiado "empanturrado", e já não coubesse lá mais nada.

Das soluções apresentadas aquela que eu uso é do ciclo while, que vai recolhendo os caracteres do buffer até chegar ao caracter '\n', ficando assim o buffer vazio.

Dois getchar()? Primeiro, e apesar de não ser um grande reparo, a versão, por assim dizer, do getchar() em C++ é cin.get(). Segundo, dessa maneira ainda estariamos a empanturrar mais o buffer (com os computadores de hoje em dia, não era por isto que a RAM se esgotaria, mas um bom programador presa-se sempre por poupar ao máximo a sua máquina ...).

system("pause")? Este então é que nem pensar. Este método está estremamente dependente da plataforma em que está a ser execuado.

Só mais uma coisa. Baderous, tu implimentas-te a tua função limpa_buffer antes dos outputs que indicam qual é o número maior:

Código:
void limpa_buffer()
{
  char c;
  do
  {
    c=getchar();
  } while(c!='\n');
}
 
...
limpa_buffer();
cout << " O maior numero e: "; 
    cout << maior;   
 
    getchar();
    return 0;           
}

Se a implimentasses só antes do getchar(), haveria algum problema?

Código:
void limpa_buffer()
{
char c;
do
{
c=getchar();
} while(c!='\n');
}
 
...
cout << " O maior numero e: "; 
cout << maior; 
 
[COLOR=red]limpa_buffer();[/COLOR] 
getchar();
return 0; 
}

É só mesmo por uma questão de esclarecimento.

Vá, cumps
 
Última edição:
Eu custumo fazer outra coisa ainda porque caso o buffer esteja limpo (não se sabe quando se está a ler com fgets porque pode ou não passar o limite de leitura) vais ter de dar mais um enter para fazer o '\n' e sair do ciclo

Código:
fgets( var, size, stdin);
                  if (var[strlen(var)-1]=='\n')
                      var[strlen(var)-1]='\0';
                  else apaga_buffer();
 
Back
Topo