Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

kvyil

Como formatar um entrada para inteiro

Mensagens Recomendadas

kvyil

Olá boa tarde. Estou com uma dúvida, estou a desenvolver um programa em C, e que o objectivo é que o utilizador digite um numero inteiro, e no entanto se por acaso o utilizador digita um carácter (letra) o programa entra num ciclo e o programa "atrofia".

Alguém me poderia explicar como posso "formatar" a entrada para que o user digite obrigatoriamente um numero inteiro. E que se ele digitar uma letra o programa deverá pedir novamente a entrada de dados... Espero que me tenha feito compreender.  Abraços ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

O scanf() (suponho que seja o que estas a usar) e o tratamento de erros sao dificeis de usar em conjunto.

Em vez disso usa o fgets e o strtol.

Se detectares um erro facilmente tornas a obter um input novo do utilizador.

http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html

http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtol.html


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
kvyil
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int num; 
    do { 
         printf ("Digite um numero: "); 
         scanf ("%d", &num);
         }while (num >=99); 
    printf ("O numero digitado foi: %d ", num); 
    system ("pause"); 
} 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

#include <stdio.h>

int main(void) {
        int n,v;
        do {
                printf("Insira o numero: ");
                v=scanf("%d",&n);
                scanf("%*[^\n]");
                scanf("%*c");
        } while (v!=1);
        return 0;
}

Esta solução deve chegar para o que queres, só no caso de introduzires "23sdfs" é que aceita como válido, porque lê o nº 23 correctamente, não ligando ao que está a seguir. Os 2 últimos scanfs servem para limpar o conteúdo do buffer. Esta solução baseia-se no valor de retorno do scanf. Lê a documentação da função para a perceberes.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.