Jump to content
SitoMan

[Duvida] Fechar programa com letra E (Muito noob)

Recommended Posts

SitoMan

Viva!

Tenho este programa feito:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int num1, num2;
  printf("Insira o primeiro numero\n");
  scanf("%d",&num1);
  printf("Insira o segundo numero\n");
  scanf("%d",&num2);
  printf("Os caracteres inseridos foram %d e %d\n",num1,num2);
  system("pause");
  getchar ();	
  return 0;
}

Penso que não tem nenhum BUG!

O que eu queria, era:

Assim que o programa termina-se as suas funções.. Queria que aparece-se uma frase: "Deseja fechar? Carregue na tecla E".

Ou seja.. Não quero que o programa feche com qualquer tecla. Quero que só feche com a tecla E.

Como Faço?

Obrigado e desculpem a ignorancia!

Share this post


Link to post
Share on other sites
Rui Carlos

Usa um ciclo, que só termina quando o utilizador introduzir um determinado valor. Armazenas esse valor numa variável, e enquanto for diferente de 'E', continua o executar o ciclo.

Share this post


Link to post
Share on other sites
Tharis

Usa um ciclo, que só termina quando o utilizador introduzir um determinado valor. Armazenas esse valor numa variável, e enquanto for diferente de 'E', continua o executar o ciclo.

Em código fica:

printf("Deseja fechar? Carregue na tecla E.\n");
while (getchar()!='E');
return 0;

Share this post


Link to post
Share on other sites
SitoMan

Hum.. Fixe!

Já consegui! Obrigado!

Agora outra coisa..

Se eu quiser meter por exemplo que o programa feche com a tecla E e com a tecla P?

Tipo.. O usuario pode escolher se quer fechar com a tecla E ou a tecla P!

Como se faz?

Thanks!

Share this post


Link to post
Share on other sites
The Loser

Usando o código fornecido pelo Tharis:

char x;
scanf("%c",&x); //Isto le o caracter a ser usado.
printf("Deseja fechar? Carregue na tecla %c.\n",x);
while (getchar()!=x);
return 0;

Ou caso eu tenha percebido mal é possivel que seja isto :) :

printf("Deseja fechar? Carregue na tecla P ou E.\n",x);
while (getchar()!='E' || getchar()!='P');
return 0;


I intend to live forever. So far so good.

Share this post


Link to post
Share on other sites
SitoMan

Usando o código fornecido pelo Tharis:

char x;
scanf("%c",&x); //Isto le o caracter a ser usado.
printf("Deseja fechar? Carregue na tecla %c.\n",x);
while (getchar()!=x);
return 0;

Isto aqui envolve mais senas.. Ja envolve o Scanf e tudo...

Ou caso eu tenha percebido mal é possivel que seja isto :) :

printf("Deseja fechar? Carregue na tecla P ou E.\n",x);
while (getchar()!='E' || getchar()!='P');
return 0;

Isto aqui, para fechar tem que se meter EP. E não é bem isso que quero. Eu quero que aquilo feche só com E ou feche só com P.

Entendes?

Share this post


Link to post
Share on other sites
pmg

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void exit_with(const char *letters) {
 int ch;
 do {
   ch = getchar();
 } while ((ch != EOF) && (letters && !strchr(letters, ch)));
 exit(ch == EOF ? EXIT_FAILURE : EXIT_SUCCESS);
}

E podes chamar a função, por exemplo, assim

#include <stdio.h>

/* Nao esquecer de por o protótipo da função exit_with() em "scope" */

int main(void) {
 printf("Enter E or P to exit\n");
 exit_with("EPep");
 return 0;
}


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!

Share this post


Link to post
Share on other sites
The Loser

Isto aqui, para fechar tem que se meter EP. E não é bem isso que quero. Eu quero que aquilo feche só com E ou feche só com P.

Entendes?

Não tem que se premir EP.. O controlador || trabalha como OR, ou seja, quando carregado o E ou P, ele fecha.


I intend to live forever. So far so good.

Share this post


Link to post
Share on other sites
Rui Carlos

Ou caso eu tenha percebido mal é possivel que seja isto :) :

printf("Deseja fechar? Carregue na tecla P ou E.\n",x);
while (getchar()!='E' || getchar()!='P');
return 0;

Suponhamos que introduzes E. Ele falha na primeira comparação, e vai para a segunda, onde terás que introduzir um novo caracter. E a segunda só vai falhar se introduzires um P.

Ou seja, tens que introduzir EP para saíres do ciclo.

Devias usar &&, e devias armazenar a variável, para não teres que introduzir dois caracteres.

Share this post


Link to post
Share on other sites
Tharis

@pmg,

para quem está a aprender (deduzo do código e da dúvida), dúvido que isso o ajude... :|

@SitoMan,

faz assim

printf("Deseja fechar? Carregue na tecla P ou E.\n");
while (1) {
   c=getchar();
   if (c=='e' || c=='p') break;
}
return 0;

Share this post


Link to post
Share on other sites
The Loser

Suponhamos que introduzes E. Ele falha na primeira comparação, e vai para a segunda, onde terás que introduzir um novo caracter. E a segunda só vai falhar se introduzires um P.

Ou seja, tens que introduzir EP para saíres do ciclo.

Devias usar &&, e devias armazenar a variável, para não teres que introduzir dois caracteres.

Bleh, é o que dá trabalhar sem dormir :)

Yup, tens razão. Já me estou a confundir todo.


I intend to live forever. So far so good.

Share this post


Link to post
Share on other sites
Rui Carlos

@pmg,

para quem está a aprender (deduzo do código e da dúvida), dúvido que isso o ajude... :|

@SitoMan,

faz assim

printf("Deseja fechar? Carregue na tecla P ou E.\n");
while (1) {
   c=getchar();
   if (c=='e' || c=='p') break;
}
return 0;

Qual é a ideia de usar um break em vez de colocar a condição no while? Isto só dificulta a legibilidade do código.

Share this post


Link to post
Share on other sites
SitoMan

Então como faço?

A maneira mais simples de preferência, e a maneira que eu consiga compreender mais facilmente! Obrigado!

Share this post


Link to post
Share on other sites
Baderous

do {
printf("Prima a tecla P ou E\n");
c = getchar();
scanf("%*[^\n]"); scanf("%*c"); //limpar o buffer
} while (c!= 'E' && c!='P');

Sem ciclos infinitos com breaks no meio fica melhor.

Share this post


Link to post
Share on other sites
pmg

@pmg,

para quem está a aprender (deduzo do código e da dúvida), dúvido que isso o ajude... :|

Aceito a crítica :)

Mas não espero ir-me embora do site ainda por umas horas e estou pronto a expandir a resposta e tirar dúvidas.

De qualquer maneira, quem está a aprender (e quem já trabalha há anos em C) deve, na minha opinião, fazer o máximo de funções em que consegue pensar para um determinado problema.

A tarefa que sai do programa quando se carrega em determinada tecla é uma boa candidata para uma função específica.


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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.