Jump to content
Sign in to follow this  
JoaoPCarvalho

duvida na validação

Recommended Posts

JoaoPCarvalho

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

Share this post


Link to post
Share on other sites
JoaoPCarvalho

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

Share this post


Link to post
Share on other sites
Baderous

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

Share this post


Link to post
Share on other sites
JoaoPCarvalho

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

Share this post


Link to post
Share on other sites
JoaoPCarvalho

Obrigado

Pus o

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

çogo a seguir ao

scanf("%d", &fin_emp);

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • 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.