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

duarte_valente

Funçao para sair da linha de comandos

12 mensagens neste tópico

Amigos gostava que me ajudassem é urgente!! preciso de uma funçao para o meu (jogo Sudoku) para fechar a linha de comandos.Tipo queria axim,aparecia no jogo: p=sair, e depois carregava no p e fechava a janela da linha de comandos.Ouvi dizer que era a função exit(). mas estou perdido,procurei e nao encontrei nada,que ajudasse

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para saber como fechar a janela da linha de comandos é preciso saber como é que a abriste.

Se não foste tu que a abriste, deixa a responsabilidade de a fechar para o sistema (o IDE, o SO, o código anterior ao main, ...) que a abriu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas nao é ninhum problema..eu compilei, mas eu quero uma função para o meu código para fechar a janela do comandos através da tecla - p.

percebeu?é para o jogo ficar melhor

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O programa seguinte funciona como queres que o teu programa funcione, isto é, abre uma janela da linha de comandos, espera que carregues em ENTER, e depois fecha a janela da linha de comandos?

#include <stdio.h>
int main(void) {
  printf("Carrega em ENTER\n");
  getchar();
  return 0;
}

Se este programa funciona como queres, usa a instrução que ele tem para fechar a janela da linha de comandos (o `return 0;`).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é mais o seguinte

tenho codigo a correr num ciclo infinito

do{

  //codigo

}while(1)

e simplesmente o que eu quero é sem perguntar nada a ninguem, com o codigo sempre a correr, aquilo puder parar quando eu carrego numa tecla sem perguntar nada a nng....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa perguntar, eu estou compilando na linha de comandos do Ubuntu(linux). Compilei esse programa e nao fechou a janela de comandos.Aqui está o meu código que desejo:

Ajuda-me

#include <stdio.h>
#include <stdlib.h>
int main ()
{
char t;
do
	{
	t='0';
	//t=getchar;
	scanf("%c", &t);
	if ((t=='p') || (t=='P'))
		{

		//system("clear");//executa bem, o system("sair") já nao, nem exit(1)..

		//system("sair"); // nao dá?porque??
		exit(1);
		}

	}
while(1);
}



como disse se usar o system("clear") dá bem,executa bem,apaga o que está na janela.

quanto ao system("exit") este nao faz nada na linha de comandos.

Eu fui experimentar na linha de comandos e fiz exit e logo nesse momento fechou a janela na linha de comandos no qual estava a trabalhar.

o que será?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então temos:


                        system("exit") --\
+------+     +-------+     +----------+  V  +-------+     +------+
| S.O. | ==> | shell | ==> | programa | ==> | shell | ==> | exit |
+------+     +-------+     +----------+     +-------+     +------+
   1             2              3               4            5

Ou seja, o teu Sistema Operativo (1) dá-te uma janela de linha de comandos (2) onde tu executas o teu programa (3).

Dentro do teu programa tens uma chamada à função system.

Esta função "abre" uma shell nova (4), e, nessa shell nova, executa os comandos que o system tinha como parametro: no teu caso era o único comando exit (5), que faz essa shell (4) fechar e o teu programa continuar.

Segundo me parece tu queres fazer com que o teu programa (3) feche a janela criada pelo S.O. (2).

Não me parece que seja possível (e, se for, deve ser difícil).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
como disse se usar o system("clear") dá bem, executa bem, apaga o que está na janela.

quanto ao system("exit") este nao faz nada na linha de comandos.

Não sei se é suposto o teu hack funcionar ou não, mas tu enganaste-te: no código diz system("sair"). Assim, não dá de certeza.

Ah... e não deve funcionar. O System executa o comendo numa nova instância da linha de comandos, portanto o "exit" vai fechar só essa instância.

Eu fui experimentar na linha de comandos e fiz exit e logo nesse momento fechou a janela na linha de comandos no qual estava a trabalhar.

o que será?

O C não sabe o que é uma "janela de comandos", e nem sequer sabe o que é uma "janela". Logo, a ideia de "fechar a janela (de comandos)" não passa de um canto satânico para o C. Não há nenhuma maneira sem usar alguma biblioteca mais específica.

A interface de utilizador que a biblioteca do C permite é mais terra-a-terra. Mostras texto ao utilizador, e ele responde com texto. Nada de efeitos, de screen clears, nem nada disso.

Mesmo que descubras como o fazer, dado que aparentemente o teu programa corre numa linha de comandos, aconselho-te a não o fazeres. Não é nada agradável estar a mexer na linha de comandos e ela fechar-se quando um programa termina.

Quando queremos esse tipo de controlo, normalmente usamos uma interface gráfica.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois,obrigado a mesma.

e quanto á função: system("exit"), o que axa?só funcionara em dev++?é que é esquezito nao dar no linux...

compriende, essa funçao que quero era para o meu jogo(Sudoku) ficar melhor para a apresentação,ter um bom aspecto tanto prático e tanto á sua imagem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
compriende, essa funçao que quero era para o meu jogo(Sudoku) ficar melhor para a apresentação,ter um bom aspecto tanto prático e tanto á sua imagem...

Pois, mas se fizesses isso não ias melhorar o aspecto do programa.

Já agora, no windows esse efeito é automático, porque ele fecha a janela da linha de comandos assim que o programa termina.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho aqui uma funçao no qual feixa a janela de comandos do linux.

mas esta funçao faz o seguinte, quando compilo e depois executo, logo neste momente a janela fecha.

Pode me ajudar a que apareca um printf("p=sair\n"); e depois carrego p e saí.

nao consigo modificar como eu quero..

aqui esta a função, gostava que me ajudassem.

int main ()
{
    char retorno[20], comando[30];
    
    FILE *p = popen("ps | grep 'bash' | awk '{print $1}'", "r");
    fgets(retorno, 18, p);
    pclose(p);
    
    sprintf(comando, "kill -9 %s", retorno);
    
    system(comando);
    
    return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tenho aqui uma funçao no qual feixa a janela de comandos do linux.

mas esta funçao faz o seguinte, quando compilo e depois executo, logo neste momente a janela fecha.

Pode me ajudar a que apareca um printf("p=sair\n"); e depois carrego p e saí.

nao consigo modificar como eu quero..

aqui esta a função, gostava que me ajudassem.

A minha ajuda é: seleciona equele código e cerrega no Delete.

Aquele código nem sequer é seguro. Imagina que outro utilizador está a correr uma shell noutra janela, que por acaso até foi aberta primeiro. De repente fica sem essa janela, e tua não é fechada.

É má ideia. Apaga aquela heresia!

O teu programa executa-se a partir da linha de comandos. Tu metes o nome do executável e o programa começa a escrever coisas no terminal. Quando o programa termina, é suposto voltar ao terminal. Não violes convenções de 30 anos. Eu até nem gosto muito de convenções, mas com esta concordo.

Se queres que a janela feixe, trata de aprender QT, GTK, qualquer coisa que dê ao programa uma janela própria dele.

JJ

0

Partilhar esta mensagem


Link 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