Teste de Caracter... [RESOLVIDO]

1. Teste de Caracter... [RESOLVIDO]

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 31/05/2010 - 15:54h

Boa tarde pessoal...

Estou tendo um problema para fazer o tratamento de erros de um exercício da faculdade.

Preciso impedir que caracteres sejam digitados em campos inteiros ou real.

Pensei em usar isdigit da ctype.h. mas não tenho muito conhecimento sobre o seu uso.

Se alguem puder me dizer o que está errado nessa parte do código eu agradeço.

#include <stdio.h>

#include <stdlib.h>
#include <ctype.h>

int main()

{

int quant_prod;




do

{

do
{
system("clear");

printf(" || Controle de Estoque ||\n\n");

printf("Digite a quantidade de produtos a ser cadastrado:\n");
scanf("%d", &quant_prod);
if (isdigit(quant_prod))
{
printf("Apenas numeros podem ser digitados.\n");
printf("Precione <ENTER> para continuar.\n");
system("read b");
}
if (quant_prod <= 0)
{
printf("Opcao Invalida...\n");
printf("Digite um numero maior que 0.\n");
printf("Precione <ENTER> para continuar.\n");
system("read b");
}
} while (quant_prod < 1 || isdigit(quant_prod));
}
}

O erro que aparece é: "Falha de Segmentação" e o programa é encerrado.

Antes, tinha tentado o mesmo código com !isdigit(quant_prod), pois imaginei que essa função retornasse verdadeiro quando o campo fosse numérico.
Mas o programa assionava o primeiro if sempre que um número éra digitado e depois dava problema.

Ao incluir essa biblioteca, não é necessário acrescentar nada a compilação, correto???
gcc main.c -o controle

Agradeço muito qualquer ajuda que possa ser oferecida.

Muito obrigado.


  


2. MELHOR RESPOSTA

Caio Carrara
ccarrara

(usa Fedora)

Enviado em 01/06/2010 - 04:34h

Esse código que eu fiz só aceita números. Trata a entrada como um caracter, inserindo-o em uma string de um caracter para que seja usada a função atoi().

Já ajuda?

#include <stdio.h>
#include <stdlib.h>

int main(void){

char sQtd[2];
int iQtd;

sQtd[1] = '{TTEXTO}';

scanf("%c", &sQtd[0]);
if(sQtd[0] < '0' || sQtd[0] > '9'){
printf("SOMENTE NUMEROS(sQtd=%c)\n", sQtd[0]);
sQtd[0] = '{TTEXTO}';
}
else{
iQtd = atoi(sQtd);
printf("NUMERO EH: %d\n", iQtd);
}

return 0;
}

3. Re: Teste de Caracter... [RESOLVIDO]

André
andrezc

(usa Debian)

Enviado em 31/05/2010 - 22:20h

Se for o que eu estou pensando, você pode usar a função atoi().


4. Re: Teste de Caracter... [RESOLVIDO]

Caio Carrara
ccarrara

(usa Fedora)

Enviado em 01/06/2010 - 04:36h

deu algum erro na msg, onde está '{TTEXTO}' na verdade é o char de fim de string '\.0' (sem o ponto)


5. Re: Teste de Caracter... [RESOLVIDO]

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 01/06/2010 - 12:14h

Muito obrigado pela ajuda gente...

Ontem não pude mais acessar a internet e depois de horas quebrando a cabeça, acabei montando uma function para resolver o problema (como ccarrara mencionol, e utilizando o atoi() e atof()).

Mas mesmo assim agradeço muito pela ajuda de vocês.

E apesar de eu não ser muito bom em C, se eu puder ajudar, podem contar comigo.

Segue as duas funções (para int e float):

#include <stdio.h>

#include <stdlib.h>

#include <string.h>





float teste_float()

{

char a[20];

int i, sair, cont;

float result;



do

{
cont = 0;

sair = 0;

i = 0;

scanf("%s", a);

do

{
if (a[i] == 46)
{
cont++;
}
if (cont == 2)
{
printf("\nO .(ponto) so deve ser utilizado uma vez, na separacao das casas decimais.\n");
printf("Precione <ENTER> para continuar.\n");
system("read b");
system("clear");
printf("Digite novamente:\n");
sair = 1;
}

if ((a[i] != 46 && a[0] != 45) && (a[i] < 48 || a[i] > 57))

{

printf("\nNao digite caracteres dentro do campo numerico.\n");

printf("Precione <ENTER> para continuar\n");

system("read b");

system("clear");

printf("Digite novamente:\n");

sair = 1;

}

i++;

} while (i < strlen(a) && sair != 1);

} while (sair != 0);

result = atof(a);

return result;

}







int teste_int()

{

char a[20];

int i, sair, result;



do

{

sair = 0;

i = 0;

scanf("%s", a);

do

{

if ((a[0] != 45) && (a[i] < 48 || a[i] > 57))

{

printf("\nNao digite caracteres dentro do campo numerico.\n");

printf("Precione <ENTER> para continuar\n");

system("read b");

system("clear");

printf("Digite novamente:\n");

sair = 1;

}

i++;

} while (i < strlen(a) && sair != 1);

} while (sair != 0);

result = atoi(a);

return result;

}


Essas funções já resolveram meu problema.

Mais uma vez, muito obrigado aos que se preocuparam.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts