Ir ao conteúdo
  • Cadastre-se

Tratativa de erros C


Delemar Neto

Posts recomendados

Boa tarde!!

 

Existe alguma forma do programa não dar erro ao digitar um CHAR num campo INT?

 

Alguma condição que faça com que esse erro seja tratado?

 

Por exemplo, no código abaixo:

 

Quero uma condição, ou algo que faça com que, se valor for diferente de número, o programa deve solicitar q seja digitado um numero, não dar erro como está fazendo...

int main(){    int valor;    puts("informe o valor:");    scanf("%d",&valor);    printf("%d",valor);}

Código é apenas ilustrativo.

 

Link para o comentário
Compartilhar em outros sites

Em C, nativamente, não é possível armazenar um CHAR em INT, devido ao tamanho de memória ocupado para cada um deles.

O tipo CHAR, comumente, ocupa 1 Byte (8 Bits), enquanto o INT ocupa 4 Bytes (32 Bits). Esse tipo de informação é detectada pelo programa no momento da execução.

É até possível fazer o que você quer, mas não de maneira trivial.

 

A ideia mais comum, para esse tipo de situação, é fazer a leitura em CHAR e, se for número, converter o CHAR em INT e armazená-lo em uma variável INT.

 

Um exemplo bem simples e com pouco tratamento, apenas obter uma noção:

    char leitura[100];    int valor = -1;     printf("informe o valor: ");    scanf(" %s", leitura);     if ( leitura[0] >= '0' && leitura[0] <= '9' ) // Considerando que o vetor inteiro seja numerico caso a primeira posicao seja verdadeira        valor = atoi(leitura);     printf("Conteudo lido: %s\n", leitura);     if ( valor < 0 )        printf("Sem valor numerico\n");    else        printf("Numero: %d\n", valor);
Link para o comentário
Compartilhar em outros sites

OK!

Se eu entendi bem o erro:

Segue uma das possíveis soluções praticas:

Se não valeu!

#include <stdio.h>int main(){    int nt_idade = 0;    char chr_vrsOK = 0;    gt_TenteNovamente:    puts("Quantos anos voce tem:");    chr_vrsOK = scanf(" %d", &nt_idade); fflush(stdin);    if(!chr_vrsOK)    {        puts("Digite sua Idade com Numeros. Por favor!");        goto gt_TenteNovamente;    }    if( nt_idade > 59)        puts("Seja bem vindo a melhor idade!"); else        puts("Voce e Jovem ainda!");    printf("Com %d anos.", nt_idade);return(0);}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...