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

JoaoPCarvalho

duvida na validação

6 mensagens neste tópico

Boas pessoal,

Estou com um problema na validação, quando insiro um caracter o programa passa-se, a imagem comoça tipo a tremer.

Quando o que devia fazer era voltar a aparecer o menu. Que é o que faz quando insiro por exemplo o n.º 4.

...

int pede_dados()

int fin_emp;

do
	{
		system("cls");
		printf("\n\n__________________________ MENU INSERIR DADOS __________________________\n\n\n");
		printf(" INDIQUE OS SEGUINTES DADOS REFERENTES AO EMPRESTIMO QUE PRETENDE OBTER:\n\n");
		printf("\n\n QUAL A FINALIDADE DO EMPRESTIMO?\n\n");
		printf(" 1 - COMPRA \n");
		printf(" 2 - CONSTRUCAO \n");
		printf(" 3 - OBRAS \n\n");
		printf(" Seleccione uma das opcões: ");
		scanf("%d", &fin_emp);
	}
while (fin_emp<1||fin_emp>3);

...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já descobri

	do
	{
		system("cls");
		printf("\n\n__________________________ MENU INSERIR DADOS __________________________\n\n\n");
		printf(" INDIQUE OS SEGUINTES DADOS REFERENTES AO EMPRESTIMO QUE PRETENDE OBTER:\n\n");
		printf("\n\n QUAL A FINALIDADE DO EMPRESTIMO?\n\n");
		printf(" 1 - COMPRA \n");
		printf(" 2 - CONSTRUCAO \n");
		printf(" 3 - OBRAS \n\n");
		printf(" Seleccione uma das opcões: ");
		scanf("%d", &fin_emp);
		getchar();
		if (fin_emp<1||fin_emp>3)
		{
			printf(" ATENÇÃO!!! ERRO!!! INSIRA SOMENTE OPÇÕES VÁLIDAS \n");
		}
	}
while (fin_emp<1||fin_emp>3);

pus o getchar() a seguir ao scanf.

Obrigado na mesma

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso deve-se ao facto de o programa esperar um int e ser passado um char.

A solução passa por utilizar o valor retornado pelo scanf aquando da leitura:

On success, the function returns the number of items succesfully read. This count can match the expected number of readings or fewer, even zero, if a matching failure happens.

In the case of an input failure before any data could be successfully read, EOF is returned.

Convém também que limpes o buffer, descartando os caracteres, senão a solução do getchar() só funciona no caso de teres inserido apenas 1 caracter. Se inserires mais, isso vai estourar outra vez.

Vê esta thread: http://www.techzonept.com/showthread.php?t=307012

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usei o fflush(stdin) antes do scanf

	do
	{
		system("cls");
		printf("\n\n__________________________ MENU INSERIR DADOS __________________________\n\n\n");
		printf(" INDIQUE OS SEGUINTES DADOS REFERENTES AO EMPRESTIMO QUE PRETENDE OBTER:\n\n");
		printf("\n\n QUAL A FINALIDADE DO EMPRESTIMO?\n\n");
		printf(" 1 - COMPRA \n");
		printf(" 2 - CONSTRUCAO \n");
		printf(" 3 - OBRAS \n\n");
		printf(" Seleccione uma das opcões: ");
		fflush(stdin);
		scanf("%d", &fin_emp);
		getchar();
		if (fin_emp<1||fin_emp>3)
		{
			printf("\n ATENÇÃO!!! ERRO!!! INSIRA SOMENTE OPÇÕES VÁLIDAS \n\n");
			system("pause");
		}
	}
while (fin_emp<1||fin_emp>3);

assim já não está a dar problemas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado

Pus o

scanf("%*[^\n]%*c");

çogo a seguir ao

scanf("%d", &fin_emp);

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