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

Dúvida execução de programa


Guest pedrovg2

Pergunta

Guest pedrovg2

Estou nas minhas primeiras lições de C. O que criei foi para colocar três valores e o programa calcular o produto. Coloco o 1º enter 2º enter º enter e aí o programa fecha do nada sem apresentar valor.

Fiz algum coisa de errado, botão errado? Como resolvo isso?

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Posta seu código aqui...

Mas acho que até já sei qual é seu problema, você tá com uma estrutura assim :

int main()
{
     //programa

     return 0;
}
Se você estiver fazendo assim ele vai fazer as contas e sair do programa quando acabar sem dar tempo visualizar o resultado. Para resolver faça assim:
int main()
{
     //programa
    
    system("pause");
   return 0;
}
OU
main()
{
     //programa

     system("pause");
}

Com o system("pause") depois dos calculos o programa ficará esperando você pressionar qualquer tecla para sair. Com isso você poderá visualizar o resultado do seu programa.

Fiz de 2 maneira, a primeira é com a main() com retorno, ai você colocar o system antes do return. No segundo coloquei a main() sem retorno, assim você não precisa colocar o return.

Esse tipo de "erro de execução" é bem comum para iniciantes, tente não copiar os codigos sem entender, procure entender antes de copiar para não acontecer esse tipo de problema.

Espero ter ajudado =)

Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro: NÃO existe nos padrões C ANSI void main(). Utilize int main(void) ou int main(int argc, char *argv[]).

Segundo: Não utilize system("pause"), além de ser um metódo não portável, utiliza muitos recursos para somente pausar o programa.

Utilize getchar() da stdio.h no C e cin.get() no C++.

De qualquer forma, se não quiser pausar, apenas execute o programa pelo cmd. (Isto no Windows)

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

mas para ter certeza do funcionamento do getchar é necessário limpar o buffer de entrado padrão, no caso o teclado, daí antes do getchar coloca um fflush(stdin); da stdlib.h, fica assim:

int main(void)
{
     //programa

     fflush(stdin);
     getchar();
     return 0;
}

e não se esqueça, A FUNÇÃO main É DO TIPO INTEIRA, SEMPRE fica "int main()", como não vai usar argumentos da função main ainda coloca o void ali no meio dos parenteses

Editado por Evandro
Link para o comentário
Compartilhar em outros sites

  • 0

No começo não tem problema usar main sem retorno: main(), mas se você quiser já ir se acustumando em trabalhar com retorno e parametros para uma função use mesmo a main com retorno int, sem se esquecer q toda vez que uma função apresentar retorno deve colocar no final do bloco um return com o valor ou variavel que deseja retorna para a função que a chamou. No caso da main() quando você retorna um inteiro (pois a main() apresenta como retorno sempre um inteiro) você está devolvendo o controle para o sistema operacional. O return 0 quer dizer que o programa foi executado com sucesso, mas quando for return 1 quer dizer q ocorreu um problema na execução, normalmente colocamos como exit(1) para abortar o programa no exato momento da falha.

E no caso de pausar o programa, continuo achando o system("pause") mais eficiente que o getchar(), pois para este será necessario esvaziar o buffer, enquanto para o system você não precisa se preocupar com nada só em parar o programa.

E mais, quando você usar a main sem parametros não precisa fazer assim: int main(void),

você pode omitir o void em todos os casos em que a função em questão não apresentar retorno, assim:

int main()

Até \o/

Link para o comentário
Compartilhar em outros sites

  • 0

Se pode usar o certo, por que utilizar o errado?

Além de que pode surgir alguns problemas utilizando void main: http://users.aber.ac.uk/auj/voidmain.shtml

system("pause") não é mais eficiente, além de só funcionar no Windows, ele tem que fazer todas essas etapas SÓ para pausar um programa:

  1. Suspende o seu programa
  2. Chama o Sistema Operacional
  3. Abre um shell do SO (executa novamente o SO em um sub-processo)
  4. O SO procura pelo comando pause
  5. Aloca a memória para ser utilizada pelo comando
  6. Executa o comando e espera por uma tecla
  7. Desaloca a memória utilizada pelo comando
  8. Sai do Sistema Operacional
  9. Continua a execução do programa
Ainda, utilizar int main(void) ao invés de int main() ajuda o compilador a apontar erros em tempo de compilação.

Abraços.

Editado por Durub
Link para o comentário
Compartilhar em outros sites

  • 0

esqueça o system("pause");

como você viu, é a pior maneira de todas de um programador parar um programa

você tem duas opções (que eu conheço!)

getchar();

getch();

o getchar() é da biblioteca 'stdio.h'

o getch() é da biblioteca 'conio.h'

EU prefiro usar o getch(), por ser muito mais eficiente que o getchar()

existe casos que um só getchar() não é o suficiente para parar um programa

tem que ser colocado mais um

main(){

//..conteudo..

getchar();

getchar();

}

por isso o getch() é melhor

o getch() na verdade tem outra funcionalidade, que com o tempo você aprenderá e usará bastante

mas, para o que você quer atualmente, serve também

obs: antes que alguém venha me corrigir,

a principal funcionalidade do getch() não é a de 'pausar'

mas ele serve para tal também, desde que o use da maneira correta!

use-o assim:

main(){

//..conteudo..

getch();

}

Editado por hyeNna
Link para o comentário
Compartilhar em outros sites

  • 0

Eu utilizava o getch(), mas também por questões de portabilidade, parei. (conio.h significa Console I/O e é uma biblioteca proprietária da Borland, o Visual C++ também tem uma implementação dela).

Melhora, mas agora na questão de portabilidade passa de Windows para somente 2 compiladores.

Talvez a ncurses no UNIX deva ter uma implementação do getch(), mas ainda prefiro utilizar o getchar().

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

hum!

legal essa informação, eu não sabia

se não fosse pela explicaçao que dei acima

eu usaria a getchar() sem problemas

mas, o melhor a fazer mesmo é implementar sua propria biblioteca

afinal, se você quer uma coisa bem feita, faça você mesmo!

^^

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...