Ir ao conteúdo
  • Cadastre-se

C Não consigo pausar o programa na tela usando o comando system


Posts recomendados

#include <stdio.h>

int main()
{
 float raio, perimetro;
 double Pi = 3.1415927, area;
 
 printf("Introduza o raio da circunferencia: ");
 scanf("%f", &raio);
 area = Pi * raio * raio;
 perimetro = 2 * Pi * raio;
 
 printf("Area = %f\nperimetro = %f\n", area, perimetro);    
 system("pause");
    
}

 

esta dar erro o system pause, alguem pode me ajudar, a saber o porque ao compilar está dar erro...?

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Tente usar:

getchar();

O system("pause") é na verdade uma chamada ao sistema operacional onde o comando pause é executado, então só vai funcionar no Windows ou no antigo DOS, no Linux e outros sistemas operacionais o pause não será reconhecido ou pode ser reconhecido errado.

 

Com o getchar será necessário pressionar Enter.

  • Curtir 2
  • Amei 1
Link para o comentário
Compartilhar em outros sites

Colocar uma pausa em um programa na linha em que ele vai terminar em geral indica que quer rodar seu programa apenas dentro de algum IDE e não sabe como e nem tentou configurar para que ele pare antes de fechar a janela.  

 

Um programa não é escrito para rodar dentro de um IDE. 

 

Se fosse o caso teria que ter o código fonte de seu programa e compilar toda vez que fosse usar. E todo mundo que fosse calcular aí o perímetro e a área teria que ter o fonte e o compilador e o IDE...

 

Ao compilar o programa você gera um executável e é isso que usa. No exemplo abaixo o -o indica que vai gerar o tst.exe no diretório corrente no Windows.

 

Para rodar você digita tst e tecla ENTER. Nada mais. E se o programa parar na última linha antes de terminar é chato pra c@c3t3 pra quem está usando o programa, porque tem que teclar um ENTER a mais. E não pode colocar num script para testar com 10 círculos por exemplo, na hora de corrigir seu programa...

 

Clube> gcc -o tst -Wall x0713.c
Clube> ./tst
Introduza o raio da circunferencia: 2.5
    Area = 19.634954
    Perimetro = 15.707963
Clube> 

 

Eis o código usado:

 

#define  PI 3.1415927
#include <stdio.h>

int main(void)
{
 float raio = 0.;
  printf("Introduza o raio da circunferencia: ");
 if ( scanf("%f", &raio) <= 0) return -1;
  printf("\
    Area = %f\n\
    Perimetro = %f\n",
     PI * raio * raio,
     2 * PI * raio
     );    
}

 

Note que

  • como não vai operar com esses valores não precisa de outra variável exceto o raio
  • teste SEMPRE o retorno de scanf(). Não há sentido em seguir se não leu o raio.
  • use um define para constantes ou ao menos declare como const. Deixe o compilador trabalhar para você
  • formate os printf() no programa de modo que ajude você mesmo  a ver como sairá na tela o resultado
  • não use system() nunca. Não estará fazendo nada nem aprendendo nada. Apenas passa uma string para o shell do sistema. E é um risco de segurança e proibido em toda parte. Está programando em C. system foi escrita em C, o sistema foi escrito em C. Pode fazer qualquer coisa sem system.
  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

3 horas atrás, vangodp disse:

O getchar pode não funcionar si tiver caracteres indesejados no bufer(n vou falar lixo si não arfneto fica nervoso XDD)

"caracteres indesejados" acredito que, baseado em seu exemplo, se refere ao que pode restar de uma leitura após uma chamada da scanf(), e de certo modo é previsto que um '\n' reste no fluxo se não o ler.

 

9 horas atrás, JorgeGus disse:

Com o getchar será necessário pressionar Enter.

Com getchar(), os caracteres digitados são todos impressos até que se pressione Enter, e é preciso um loop para que a função leia tudo até encontrar o '\n', caso contrário, a função lê o primeiro caractere no fluxo, mas isso não muda o fato de que afinal se está aguardando um Enter.

 

Eis minha proposta :D

#include <stdio.h>
#include <Windows.h>

int Pause(void)
{
    DWORD mode;
    int n = 0;
    int c = 0;
    HANDLE h = GetStdHandle(STD_INPUT_HANDLE);

    if (h == NULL)
        return 1;

    // Salvando o modo atual
    GetConsoleMode(h, &mode);

    // Alterando
    SetConsoleMode(h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT));

    // Lendo
    while (c != 13) ReadConsole(h, &c, 1, (LPDWORD)&n, NULL);

    // Restaurando
    SetConsoleMode(h, mode);

    return (!n);
}

int main()
{
    int x;
    int ret;

    // Mesmo teste do vangodp
    // Sobra um '\n' no fluxo
    puts("Digite um numero:");
    scanf("%d", &x);

    // Pause() só retorna ao teclar Enter
    // Pode retornar também se ocorrer um erro :/
    puts("\nPressione Enter para prosseguir...");
    ret = Pause();

    printf("\nPause() retornou <%d>\n", ret);

    return 0;
}

Na saída:

image.png.0beb4136d5478f6c863f6527af4cc925.png

Pause() não imprime nada na saída, não é afetada pelo tal '\n' que resta no fluxo e só aguarda um Enter.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Rogresão Rodrigues Costa você não esta conseguindo usar o system("pause") porque está faltando importar a biblioteca padrão do C para permitir você se comunicar com o sistema. Tenta escrever ele assim:

 

#include <stdlib.h>	// Essa bilioteca para poder roda comandos no sistema operaciomal como system("pause").
#include <stdio.h>

int main()
{
 float raio, perimetro;
 double Pi = 3.1415927, area;
 
 printf("Introduza o raio da circunferencia: ");
 scanf("%f", &raio);
 area = Pi * raio * raio;
 perimetro = 2 * Pi * raio;
 
 printf("Area = %f\nperimetro = %f\n", area, perimetro);    
 system("pause");
    
}

 

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!