Ir ao conteúdo
  • Cadastre-se

C Validação do dado digitado pelo usuário


Posts recomendados

Estou com este problema:

Preciso que o usuário digite um valor entre 0 a 10, porém quando ele digita um valor proibido, não tem como ele digitar o valor certo.

Tentei validar o numero que o usuário digita com "if else". porém antes do mesmo tem uma estrutura de repetição.

Tem uma maneira que permita o usuário digite o valor de novo, para que ele digite o valor certo? 

#include<math.h>
#include<stdio.h>
#include<locale.h>
main(exe1)
{
    setlocale(LC_ALL,"Portuguese");
    //declaração de variaveis
    char nome[10];
    float n=0, sm=0, nm=0; //n=nota, sm=soma notas, nm=nota média
    int x=0; //x=sistema
    //entrada de dados e processamento
    for(x==0;x<4;x++)
    {
        printf("\n informe a %i nota: ",x+1);
        scanf("%f",&n);
    if(n<0)
        printf("\n informe a nota entre 0 a 10");
    else
        if(n>10)
        printf("\n informe a nota entre 0 a 10");
        else
        sm=n+sm;//calculo soma de notas
    }
    nm=sm/2;//calculo de media
    //saída de dados
    printf("\n A média de notas é: %2.f",nm);
    if(nm>6)
        printf("\n O aluno está  aprovado!");
    else
        if((nm>=4)&&(nm<6))
        printf("\n O aluno está de recuperação!");
        else
        printf("\n O aluno está  reprovado!");

 

Link para o post
Compartilhar em outros sites

@Mateus Cavalari   você pode usar o a função goto para voltar para trás ou pular para frente ,  especificando o ponto para onde quer ir , e poderia ser assim :

#define _CRT_SECURE_NO_WARNINGS
#include <math.h>
#include <stdio.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL, "Portuguese");
    //declaração de variaveis
    char nome[10];
    float n = 0, sm = 0, nm = 0; //n=nota, sm=soma notas, nm=nota média
    int x = 0; //x=sistema
    //entrada de dados e processamento
    for (x == 0; x < 4; x++)
    {
        label_1:   // ponto de refrencia para o goto
            printf(" informe a %i nota: ", x + 1);
            scanf("%f", &n);
            if (n < 0 || n > 10)
            {
               printf("\nnotas no valor de 0 ate 10\n");
               goto label_1;  // goto faz o programa ir para esse local apontado pelo label
            }
            else
                sm += n;   //  sm = sm + n   calculo soma de notas
    }
    nm = sm / 4;           //calculo de media
    //saída de dados
    printf("\n A media de notas eh : %.2f\n\n", nm);
    if (nm > 6)
        printf("\n O aluno está  aprovado . . . !");
    else
        if ((nm >= 4) && (nm < 6))
            printf("\n O aluno está de recuperação . . . !");
        else
            printf("\n O aluno está  reprovado . . . !");
    printf("\n\n\n");
    return 0;
}

 

Link para o post
Compartilhar em outros sites

@devair1010 Eu não acho esse exemplo muito pratico para alguém que está começando a programar, principalmente que ele quebra a lógica do programa com esse goto.

 

Um exemplo "melhor" seria assim.

#include <stdio.h>


int main(void)
{
    int numero = 0;
    /* Repete até o número estiver dentro da faixa desejada */
    do {
        /* Pega um numero */
        printf("\nDigite um numero entre 0 e 10:\t");
        scanf("%i%*c", &numero);

        /* Testa se está fora da faixa desejada */
        if (numero < 0 || numero > 10) {
            printf("\nDigite novamente!");
        }
    /* Repete se o número estiver fora da faixa */
    } while (numero < 0 || numero > 10);

    printf("\nOk\nO Numero %i foi aceito.", numero);
    getchar();      /* Pausa o programa */
    return(0);
}

 

Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Redes-Wi-Fi-capa-3d-newsletter.png

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!