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

Invalidar caracteres


Fruggerr

Pergunta

Pessoal, eu fiz esse programa de acordo cm pedia um exercício encontra na Net. Porém, estou cm dificuldade de o usuário não digitar caracteres, pois o programa validaria somente os números inteiros maiores que 0(zero). Cheguei a criar uma variável char para armazenar qualquer dígito caractere e invalidar, até aki td bem, o problema que fica em Loop infinito mesmo retornando falso o While. O código fonte se encontra abaixo. Ps: esse não tá inserido para invalidar caracteres. O programa tb pode encontrar algumas falhinhas de principiante. Alguém poderia dar dicas de cm solucionar esse probleminha?

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

int main() {

int num[6],i,maior;

maior=0;

printf("# Numeros maiores que 0(zero). #\n");

printf("Valido somente com numeros.\n");

for(i=1;i<=6;i++) {

printf("Digite o numero maior que 0(zero).\n");

scanf("%d",&num);

if(num==0) {

break;

}

if(maior<num) {

maior=num;

}

if(num<0) {

while(num<0) {

printf("O numero não e valido. Por favor, insira outro numero.\n");

scanf("%d",&num);

}

if(num==0) {

break;

}

if(maior<num) {

maior=num;

}

}//end para o if

}//end para o for

printf("O maior numero e: %d\n",maior);

printf("Pressione uma tecla para sair do programa.\n");

getch();

}

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Já coloquei o isdigit. + fiz uma forma q não necessitaria dele. Coloquei outra variável char c; e em todos os scanf coloquei as variável int num e char c. Logo depois de inserção dos valores tem o if(c>='a' && c<='z'). Cm isso ele invalidava os valores digitados em char + cm o if se encontra dentro de uma repetição while quando o usuário digitava um caractere entrava em loop infinito e já tentei todos as lógicas possíveis para evitar isso. nada feito até agora.

falou

Link para o comentário
Compartilhar em outros sites

  • 0

#include<stdio.h>
int main() {
  int leitura_numero,maior,i;
  printf("# Numeros maiores que 0(zero). #\n");
  printf("Valido somente com numeros.\n");

  for(i=1;i<=6;i++) {
    while (1) {
      printf("Digite o numero maior que 0(zero).\n");
      scanf("%d",&leitura_numero);
      if (leitura_numero < 1) puts("O número não é valido. Insira outro número.");
      else break;
    }
    if (i==1) maior = leitura_numero;
    else {
      if(maior < leitura_numero) maior = leitura_numero;
    }
  }//end para o for
  printf("O maior numero e: %d\n",maior);
  return 0;
}
#include<stdio.h>
#include <math.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <inttypes.h> //C99

int valida_entrada(char *entrada) {
  int tamanho = strlen(entrada);
  int i;
  for (i=0;i<tamanho && isdigit(entrada[i]);i++);
  return i == tamanho;
}


int main() {
  int maior,i;
  char linha[(int)log10f(INT_MAX)];
  intmax_t leitura_numero;

  for(i=1;i<=6;i++) {
    while (1) {
      printf("Digite o numero maior que 0(zero).\n");
      scanf("%s",&linha);
      if (!valida_entrada(linha)) puts("A entrada contém outros caracteres.\n");
      else {
    leitura_numero = strtoimax(linha,NULL,10);
    if (leitura_numero < 1) puts("O número não é valido. Insira outro número.");
    else break;
      }
      getchar();
    }
    if (i==1) maior = leitura_numero;
    else {
      if(maior < leitura_numero) maior = leitura_numero;
    }
  }
  printf("O maior numero e: %d\n",maior);
  return 0;
}

Editado por C/C++ nuts
Link para o comentário
Compartilhar em outros sites

  • 0

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main() {
   int num[6],i,maior;
   maior=0;
   printf("# Numeros maiores que 0(zero). #\n");
   printf("Valido somente com numeros.\n");
for(i=1;i<=6;i++) {
      printf("Digite o numero maior que 0(zero).\n");
      scanf("%d",&num[i]);
      if(num[i]==0) {
          break;
      }
      if(maior<num[i]) {
          maior=num[i];
      }
      if(num[i]<0) {
           while(num[i]<0) {
               printf("O numero não e valido. Por favor, insira outro numero.\n");
               scanf("%d",&num[i]);
           }
           if(num[i]==0) {
                 break;
           }
           if(maior<num[i]) {
                maior=num[i];
           }
      }//end para o if
  }//end para o for
    printf("O maior numero e: %d\n",maior);
    printf("Pressione uma tecla para sair do programa.\n");
    getch();
}
Entrada: 0. O programa sai do for e maior = 0. Por que você faz duas comparações iguais?
if(num[i]<0) {
           while(num[i]<0) {

Índices em C começam em Zero.

http://www.opengroup.org/onlinepubs/009695...inttypes.h.html

http://www.opengroup.org/onlinepubs/009695.../strtoimax.html

Editado por C/C++ nuts
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...