Ir ao conteúdo

Abortar Programa


alfredomiranda

Posts recomendados

Postado

Bem gente tô fazendo um programa em C, ai queria sabe como posso fazer pra abortar um programa no meio da execução sem ser por Alt+F4, e nem que eu precisasse voltar no menu pra sair do programa. Como se eu apertasse ESC e fechasse!

  • Membro VIP
Postado
  alfredomiranda disse:
Como assim Interação do usuário!?

Eu quero que o usuário aperte ESC e saia do programa!

Para isso, use a biblioteca <conio.h> e use a monitoração do teclado usando a função kbhit() desta biblioteca.Associe ela a um loop e coloque o ASCII 27(que corresponde ao ESC) para encerrar esse loop. Caso tenha dúvidas quanto a sintaxe do kbhit(), dê uma olhadela básica no www.gotapi.com na seção de C++.Abraços.

Postado

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

struct reg{

char nome[50];

int tel;

};

//Registro com Nome e Telefone

void visio(){

printf(" 0000000 00 \n");

printf(" 0 00 000 00 \n");

printf(" 0 0 00000 0000 00 \n");

printf(" 00 00 0 0 00 00 00 000000000 \n");

printf(" 00 00 0 0 00 00 0 \n");

printf(" 00 00 0 0 00 00 00 00 \n");

printf(" 00 00 0 000 00 00 00 00 \n");

printf(" 00 00 0 00 00 0 00 \n");

printf(" 00 00 0 00 00 0 00 \n");

printf(" 0000 0 00 00 000 000 00 \n");

printf(" 00 0 0 00 00 \n");

printf(" 0 0000 000 \n");

printf(" 0 0 \n");

printf(" 0 0 \n");

}

//Imagem da VISIO

void gravarArquivo(struct reg a[],FILE *arq,int x){

fwrite(&a[x].nome,sizeof(a[x].nome),1,arq);

fwrite(&a[x].tel,sizeof(a[x].tel),1,arq);

}

void funcAuxT(struct reg a[],int tel,int i){

int auxTel;

int j = 0;

int x = 0;

while(j<i){

auxTel = a[j].tel;

if(tel < 10){

auxTel = auxTel/10000000;

}

if((tel>=10) && (tel<100)){

auxTel = auxTel/1000000;

}

if((tel>=100)&&(tel<1000)){

auxTel = auxTel/100000;

}

if((tel>=1000)&&(tel<100000)){

auxTel = auxTel/10000;

}

if((tel>=100000)&&(tel<1000000)){

auxTel = auxTel/1000;

}

if((tel>=1000000)&&(tel<10000000)){

auxTel = auxTel/100;

}

if((tel>=10000000)&&(tel<100000000)){

auxTel = auxTel/10;

}

if(auxTel == tel){

printf("Nome: %s\n",a[j].nome);

printf("Telefone: %d\n",a[j].tel);

x++;

}

j++;

}

if(x == 0){

printf("\nNenhum contato localizado\n");

}

}

//Função serve pra pesquisar o Telefone sem que seja completo.

void funcAuxN(struct reg a[],char nome[],int i){

int num = strlen(nome);

char auxCP[50];

char auxC;

int j = 0;

int x = 0;

while(j<i){

if(num != 1){

strncpy(auxCP,a[j].nome,num);

}else{

auxC = a[j].nome[0];

}

if((strcmp(auxCP,nome) == 0)||(auxC == nome[0])){

printf("Nome: %s\n",a[j].nome);

printf("Telefone: %d\n",a[j].tel);

x++;

}

j++;

}

if(x == 0){

printf("\nNenhum contato localizado\n");

}

}

//Função pra pesquisar pelo nome sem que seja completo.

void organizarContatos(struct reg a[]){

int i = 0;

struct reg aux;

while(strcmp(a.nome,"//*") != 0){

i++;

}

for(int j=0;j<i-1;j++){

for(int x=0;x<i-1-j;x++){

if(strcmp(a[x].nome,a[x+1].nome)>0){

aux = a[x];

a[x] = a[x+1];

a[x+1] = aux;

}

}

}

}

int pesqtel(struct reg a[], int tel, int i){

int j=i-1;

int r = 0;

while((j>=0)&&(r==0)){

if(tel == a[j].tel){

r = 1;

j--;

}

else{

j--;

}

}

return r;

}

//Função que pesquisa se o numero ja foi registrado!

void cadastrarContato(struct reg a[]){

int i=0;

char cod;

FILE*arq;

arq = fopen("Agenda.dat","wb");

while(strcmp(a.nome,"//*") != 0){

i++;

}

do{

system("CLS");

fflush(stdin);

printf("Nome: ");

gets(a.nome);

strupr(a.nome);

do{

printf("Telefone: ");

scanf("%d",&a.tel);

if(pesqtel(a,a.tel,i) == 1){

printf("Numero existente, por favor digite outro\n\n");

}

}while(pesqtel(a,a.tel,i) == 1);

printf("\n");

gravarArquivo(a,arq,i);

printf("voce deseja cadastrar mais um contato? s - Sim e n - Nao\n");

scanf(" %c",&cod);

i++;

if(i == 999)

{

printf("agenda cheia");

break;

}

}while((cod == 's')&&(i < 999));

strcpy(a.nome,"//*");

a.tel = 0000000;

gravarArquivo(a,arq,i);

fclose(arq);

}

//Função que cadastra os contatos

char lerOpcao(){

system("CLS");

char x;

fflush(stdin);

printf("\n\n\t\t\t\aEscolha o que deseja fazer: \n");

printf("\t\t\t\20 1 - Cadastrar contato\n");

printf("\t\t\t\20 2 - Retirar contato\n");

printf("\t\t\t\20 3 - Listar contatos\n");

printf("\t\t\t\20 4 - Buscar contato\n");

printf("\t\t\t\20 5 - Editar contato\n");

printf("\t\t\t\20 6 - Sair do Programa\n");

x=getch();

return x;

}

//Menu principal, ativado pelo main.

void retirarContato(struct reg a[]){

system("CLS");

int i = 0, j = 0;

char nome[50];

int tel;

char cod;

int x = 1;

FILE*arq;

arq = fopen("agenda.dat","wr");

while(strcmp(a.nome,"//*") != 0){

i++;

}

printf("Bucar por:\n");

printf("1 - Nome\n");

printf("2 - Telefone\n");

printf("Qualquer outra tecla sai\n");

cod = getch();

switch(cod){

case '1': printf("\nDigite o nome do contato a ser procurado: ");

scanf("%s",&nome);

strupr(nome);

fflush(stdin);

while((strcmp(nome,a[j].nome)!=0)&&(j<i)){

j++;

}

break;

case '2': printf("\nDigite o telefone do contato a ser procurado: ");

scanf("%d",&tel);

fflush(stdin);

while((tel != a[j].tel)&&(j<i)){

j++;

}

break;

default: return;

}

if(j<i){

for(int c=j;c<i;c++){

strcpy(a[j-1+x].nome,a[j+x].nome);

a[j-1+x].tel = a[j+x].tel;

x++;

}

strcpy(a.nome,"");

printf("\nContato excluido\n");

for(int y=0;y<i;y++){

gravarArquivo(a,arq,y);

}

}else{

printf("\nContato nao existe\n");

}

system("Pause");

}

//Como nome já diz, função pra apagar o contato. Onde é procurado pelo número do telefone(Contatos não podem ter o mesmo número)

void listarContatosCadastrados(struct reg a[]){

system("CLS");

int i = 0;

organizarContatos(a);

if(strcmp(a[0].nome,"//*") == 0){

printf("Nao existe nenhum contato cadastrado\n");

}else{

while(strcmp(a.nome,"//*") != 0){

printf("\n\aNome: %s\n",a.nome);

printf("Telefone: %d\n",a.tel);

i++;

}

}

system("Pause");

}

//Listar os contatos registrados.

void buscarContato(struct reg a[]){

system("CLS");

int i = 0;

int j = 0;

int tel;

char nome[50];

char cod;

while(strcmp(a.nome,"//*") != 0){

i++;

}

printf("Bucar por:\n");

printf("1 - Nome\n");

printf("2 - Telefone\n");

printf("Qualquer outra tecla sai\n");

cod = getch();

switch(cod){

case '1': printf("\nDigite o nome do contato a ser procurado: ");

scanf("%s",&nome);

strupr(nome);

funcAuxN(a,nome,i);

break;

case '2': printf("\nDigite o telefone do contato a ser procurado: ");

scanf("%d",&tel);

funcAuxT(a,tel,i);

break;

default: return;

}

/*if(j<i){

while(j<i){

printf("\nNome: ");

puts(a[j].nome);

printf("\nTelefone: %d\n",a[j].tel);

printf("\n");

j++;

}

}else{

printf("\nContato nao localizado\n");

puts(aux[0]);

}*/

system("Pause");

}

//Busca o contato pelo telefone

void editarContato(struct reg a[]){

system("CLS");

FILE*arq;

arq = fopen("agenda.dat","wb");

int i = 0;

int j = 0;

int tel;

char cod;

char nome[50];

while(strcmp(a.nome,"//*") != 0){

i++;

}

printf("Bucar por:\n");

printf("1 - Nome\n");

printf("2 - Telefone\n");

printf("Qualquer outra tecla sai\n");

cod = getch();

switch(cod){

case '1': printf("\nDigite o nome do contato a ser procurado: ");

scanf("%s",&nome);

strupr(nome);

fflush(stdin);

while((strcmp(nome,a[j].nome)!=0)&&(j<i)){

j++;

}

break;

case '2': printf("\nDigite o telefone do contato a ser procurado: ");

scanf("%d",&tel);

fflush(stdin);

while((tel != a[j].tel)&&(j<i)){

j++;

}

break;

default: return;

}

if(j<i){

printf("\nRedigite os campos para serem editados\n");

printf("\nNome: ");

gets(a[j].nome);

strupr(a[j].nome);

printf("\nTelefone: ");

scanf("%d",&a[j].tel);

for(int x=0;x<=i;x++){

gravarArquivo(a,arq,x);

}

fclose(arq);

}else{

printf("\nContato nao localizado\n");

}

}

//Edita o contato em geral

void lerArquivo(struct reg a[]){

FILE*arq;

int i = 0;

if((arq = fopen("agenda.dat","rb")) == NULL){

arq = fopen("agenda.dat","wb");

strcpy(a.nome,"//*");

a.tel = 00000000;

fclose(arq);

}

arq = fopen("agenda.dat","rb");

rewind(arq);

while(!feof(arq)){

fread(&a.nome,sizeof(a.nome),1,arq);

fread(&a.tel,sizeof(a.tel),1,arq);

i++;

}

fclose(arq);

}

int main(){

keybd_event( VK_MENU, 0x36, 0, 0 );

keybd_event( VK_RETURN, 0x1C, 0, 0 );

keybd_event( VK_RETURN, 0x1C, KEYEVENTF_KEYUP, 0 );

keybd_event( VK_MENU, 0x38, KEYEVENTF_KEYUP, 0 );

system("color 1F");

visio();

printf("\n\n\t\t\t\1 - AGENDA ELETRONICA - \1\n");

system("Pause");

struct reg a[1000];

lerArquivo(a);

char op;

do{

//organizarContatos(a);

op = lerOpcao();

switch(op){

case '1': cadastrarContato(a);

break;

case '2': retirarContato(a);

break;

case '3': listarContatosCadastrados(a);

break;

case '4': buscarContato(a);

break;

case '5': editarContato(a);

break;

}

if ((op!='1')||(op!='2')||(op!='3')||(op!='4')||(op!='5')||(op!='6'))

{

printf("opcao invalida tente novamente");

}

}while(!(op=='6'));

system("CLS");

visio();

printf("\n");

printf("\t\t\t\4---O GRUPO VISIO AGRADECE---\4\n");

system("Pause");

}

Tá ai o código!

Isso seria uma agenda de Nome e Telefone.

  • Membro VIP
Postado

Dando uma estudada dentro da biblioteca <conio.h> descobri que a funçao kbhit() é booleana, ou seja, só retorna 0 ou 1 para não pressionada e pressionada alguma tecla, respectivamente. Vou buscar por alguma outra que faça o mesmo que a kbhit(), mas me retorne o que foi pressionado.Abraços.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!