Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida como saber se o usuario digitou etra ou numero


Fabin

Pergunta

Boa Noite Galera...

é o seguinte estou fazendo uma calculadora simples em c...

porem estu com duvida em como fazer a restriçao ao que o usuario digitar pois quando ele digitar letras o progrma deve emitir uma mensagem de erro..

posso usar o getch() porem é para char não é isso? e tambem caso o usuario digite um numro maior daria problema não??

como faço isso

valews

Editado por Fabin
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Você pode armazenar o valor digitado numa string e ir verificando se existe algum valor não-numérico. Se estiver tudo Ok, utilize a função atoi para fazer a conversão para inteiro novamente.

jonantah nno caso então declaro ela como int mesmo ou como char string[xx]??

por exemplo o usuario digitou 5835 eu teria que fazer um if para cada posiçao?

não conheço o atoi como funciona e qual a biblioteca??

e como implementaria com o do while caso digite uma letra

so um esboço ficaria mais ou menos assim?

char str[5];
do{
printf(Digite um numero?)
gets(str)
if str[1] != [red]aqui não sei o que fazer[/red]
..... fazendo com as cinco posiçoes da stringo
}whie(aqui também não sei como fazer)
atoi(str)
....
seria mais ou menos assim???

valews

Link para o comentário
Compartilhar em outros sites

  • 0
Você terá que armazenar primeiramente um valor numa string, trabalhar com esse valor pra ver se é válido (percorrer todos os caracteres e ver se são dígitos) e depois converter pra inteiro com a função atoi da stdlib.h

jonatahn fiz aqui deste modo

char str[5];int c;
    printf("Digite um numero.\n");
    gets(str);
    if (((str[0]>='0')&&(str[0]<='9'))&&((str[1]>='0')&&(str[1]<='9'))&&((str[2]>='0')&&(str[2]<='9'))&&((str[3]>='0')&&(str[3]<='9'))&&((str[4]>='0')&&(str[4]<='9')))
    {
        printf("e um numero %s",str);
    }
    else
        printf("erro");
    c=atoi(str);
    printf("%i",c);

deu certim porem quando eu digito um numero que não tenha 5 posiçoes da erro... como posso consertar isso?

valews

Link para o comentário
Compartilhar em outros sites

  • 0

troquei a linha por

(((str[0]>='0')&&(str[0]<='9'))||((str[1]>='0')&&(str[1]<='9'))||((str[2]>='0')&&(str[2]<='9'))||((str[3]>='0')&&(str[3]<='9'))||((str[4]>='0')&&(str[4]<='9')))

e deu certo por enquanto não é? hehehe...

mas agora me deparei com o seguinte problema...

ao invés de transformar ele em inteiro vou transformalo para float pois o usuario também podera digitar um numero 3.5...

agora como faço para ele identificar que é um numero é do tipo float pois do modo que fiz acim se ele digitar 3.5 ele não vairetornar 3.5 o que eu faço?

valews

Editado por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro, neste caso ele só vai aguentar 5 dígitos.

Faça o seguinte:

Variáveis:

string -> char* -> ler do teclado -> sem inicialização

i -> int -> contador -> 0

erro -> int -> marcador de erro -> 0

  1. Leia o teclado usando a função fgets da stdio.h
  2. Faça um while que rode enquanto string != '\n' (i = posição, começando com 0)
  3. Verifique se o caractere é diferente de 0~9 e '.'.
  4. Se for, coloque erro como 1 e faça um break
  5. Se não for, incremente i e deixe o while rodar novamente

Para transformar pra float, utilize atof.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0
Primeiro, neste caso ele só vai aguentar 5 dígitos.

Faça o seguinte:

Variáveis:

string -> char* -> ler do teclado -> sem inicialização

i -> int -> contador -> 0

erro -> int -> marcador de erro -> 0

  1. Leia o teclado usando a função fgets da stdio.h
  2. Faça um while que rode enquanto string != '\n' (i = posição, começando com 0)
  3. Verifique se o caractere é diferente de 0~9 e '.'.
  4. Se for, coloque erro como 1 e faça um break
  5. Se não for, incremente i e deixe o while rodar novamente
Para transformar pra float, utilize atof.

Abraços.

durub esta variavel maracdor de erro vai servir para que?? quero que quando não for numero emite uma mensagem de erro entendeu? na parate while string != "\n" diferente de \n não entendi??

não tem como você colocar este modos implementado no que coloquei ai em cima para eu entender??

obrigado

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Posteriormente, você pode verificar se erro == 1 e então mostrar a mensagem de erro.

Leia a documentação do fgets que você vai entender.

Caso o usuário digite "oi", na string vai ficar:

'o' 'i' '\n' NULL

Então o while vai executar até o final da string. Na verdade seria mais seguro tratar como NULL, só que aí você vai ter que verificar se o caractere não é um '\n' também.

Abraços.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...