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

Ramalhosa

Erro na Leitura no Scanf

6 mensagens neste tópico

Boas,fiz este menu,mas queria que ele só recebesse mesmo 1,2,3,4..

Caso uma pessoa insira 1a..ou 1 <enter> a..ele dê erro.

O problema do 1a,já consegui resolver,mas ele aceita caso faça

1 <enter>

a

e ele entra na ajuda!

Tentei fazer a leitura unicamente de um '\n' para evitar que fosse colocado outro caracter a seguir à opção certa escolhida mas não estou a conseguir faze-lo.

Alguem sabe cm resolver o problema?

Aqui vai o código.

void menuutilizador(void){
int opcao,aux;
char barra;
   
printf("Benvindo ao sistema de informação sobre cursos universitários:\n Opções disponíveis\n");

do{
printf("1 - AJUDA\n");
printf("2 - CURSO FREQUENTADO\n");
printf("3 - CURSO DESEJADO\n");
printf("4 - SAIR\n");

printf("Introduza a Opção desejada\n");
aux = scanf("%d%c",&opcao,&barra);
getchar();
if(aux != 2 || opcao < 1 || opcao > 4 || barra != '\n')
printf("\n\nErro na introdução da opção\n\nOpções Disponíveis\n\n");
}while(aux != 2 || opcao < 1 || opcao > 4 || barra != '\n');

switch(opcao)
{
case 1: printf("\n\nAjuda\n\n");
break;
case 2: printf("\n\nCurso Frequentado\n\n");
break;
case 3: printf("\n\nCurso Desejado\n\n");
break;
case 4: printf("\n\nObrigado por ter utilizado o programa\n\n");
break;
}
}

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto tá mal:

aux = scanf("%d%c",&opcao,&barra);

Mete assim:

scanf("%d %c",&opcao,&barra);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se calhar o melhor é leres o input para uma string e depois verificar se é um valor válido (só há 4, por isso não é complicado).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu queria fazer de maneira a ler o primeiro caracter,caso fosse um digito entre 1 e 4 e caso o caracter a seguir for um '\n'...tudo bem..caso fosse outra coisa qualquer dá erro..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para dps ler o primeiro caraceter que supostamente será um digito..

Vou ter de converter o caraceter para digito para dps enviar para o scanf certo?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu queria fazer de maneira a ler o primeiro caracter,caso fosse um digito entre 1 e 4 e caso o caracter a seguir for um '\n'...tudo bem..caso fosse outra coisa qualquer dá erro..

int num=0;

scanf("%d", &num);

if((num<1) || (num>4)){
    printf("ERRO, numero menor que 1 ou maior que 4!");
}
else{
    printf("numero dentro dos limites");
}

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