Uso do getch [RESOLVIDO]

1. Uso do getch [RESOLVIDO]

Lucas da Silva Rezende
lsrezende

(usa Deepin)

Enviado em 15/06/2017 - 13:52h

Galera estou tentando utilizar o getch() para ler um caractere, porém ao rodar o programa a leitura não ocorre e o programa finaliza. Com o scanf() ocorre um problema ao tentar ler algo antes, ele não lê o caractere e finaliza, pensei ser algo no buffer e tentei resolver com o fflush porém não funcionou. Aí gostaria que me ajudassem a resolver isso, obrigado.


  


2. Re: Uso do getch

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/06/2017 - 17:53h

Problemas com buffer não se resolvem nem com fflush() nem com setvbuf()/setbuf() nem com getch(). A melhor solução é você adequar suas funções de entrada àquilo que pode aparecer na entrada, lembrando que não existe “lixo” no buffer (cada caráter está lá por uma razão).

Para tentar compreender melhor o que está acontecendo, seria bom que você mostrasse o trecho do programa que dá problema, e também que informasse em qual sistema é com qual compilador está gerando seu código. A getch() do mundo UNIX com a biblioteca curses é bem diferente da função de mesmo nome que existe no mundo Microsoft com ConIO ou um de seus clones


3. Re: Uso do getch

Lucas da Silva Rezende
lsrezende

(usa Deepin)

Enviado em 15/06/2017 - 20:58h

O sistema é a distro Deepin-Linux, o compilador uso o GCC.
Ah e qual seria a diferença da getch() entre as duas bibliotecas? Só para eu poder entender melhor, porque pensei que ambas eram idênticas.

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

int main(){
char c;
int i;
printf("digite um num ");
scanf("%d", &i);
printf("digite uma letra" ); //o problema ocorre após inserir um número que quando pressiono ENTER ele passa direto pro próximo comando, com ambas funções.
//scanf("%c", &c);
c=getch();
printf("%c\n",c);
printf("%d\n", i);
}



4. Re: Uso do getch [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/06/2017 - 23:09h

Esse programa não deveria nem compilar. Você está tentando usar uma função getch() que não é declarada em nenhum dos cabeçalhos que você incluiu.


5. Re: Uso do getch

Lucas da Silva Rezende
lsrezende

(usa Deepin)

Enviado em 18/06/2017 - 23:46h

Desculpe erro meu ao passar o código eu havia declarado.
Mas o problema que agora quero resolver é o do scanf que não tenho a mínima ideia do que possa ser. É que assim quando faço duas leituras quando chega no scanf ele pula pro próximo comando no código. Igual ao trecho de código abaixo.

int main(){
setlocale(LC_ALL, "PORTUGUESE");
LISTA *lista=lcria(lista);
ALUNO *aluno = (ALUNO*) malloc(sizeof(ALUNO));

printf("Digite o nome do aluno: ");
fflush(stdin);
scanf("%[^\n]",lista->info.nome);
printf("Digite o endereco do aluno: ");
scanf("%[^\n]",lista->info.endereco);

lista=linsere(lista, aluno);
imprime(lista);

return 0;
}




6. Re: Uso do getch

Lucas da Silva Rezende
lsrezende

(usa Deepin)

Enviado em 19/06/2017 - 01:01h

Agora está aparecendo erro de segmentação.
Descobri que possui um desbloqueador que aponta onde ocorre o erro de segmentação.
O código é o seguinte:

int main(){
setlocale(LC_ALL, "PORTUGUESE");
LISTA *lista=lcria(lista);
ALUNO *aluno = (ALUNO*) malloc(sizeof(ALUNO));
printf("Digite o nome do aluno: ");
scanf("%s",lista->info->nome); //o desbloqueador aponta que aqui é onde ocorre a falha de segmentação.
printf("Digite o endereco do aluno: ");
scanf("%s",lista->info->endereco);

lista=linsere(lista, aluno);
imprime(lista);

return 0;
}



7. Re: Uso do getch [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/06/2017 - 10:45h

Você tem três níveis de ponteiro no argumento que passa a scanf(): lista é um ponteiro para estrutura que tem um campo info, que também é um ponteiro para estrutura que contém um campo nome, que é um ponteiro para (ou array de) caracteres.

Você só mostrou a alocação do nível mais externo (ponteiro indicado por lista), não os dos demais. Então, ou você deixou de mostrar a devida alocação dos demais níveis (o que torna difícil diagnosticar por aqui pelo fórum), ou realmente esqueceu dessa(s) alocação(ões), o que explica plenamente o erro de segmentação.


8. Re: Uso do getch

Lucas da Silva Rezende
lsrezende

(usa Deepin)

Enviado em 25/06/2017 - 17:12h

Deu certo! Obrigado, pelo ajuda!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts