Ir ao conteúdo

Dúvida em C


E.M.I.C.I.D.A

Posts recomendados

Postado

Rapaziada !

Boa tarde !!

Caso eu queira fazer com que o usuário digite SOMENTE números. Eu tenho que validar como o meu laço ?

"Enquanto o conteúdo da variável for diferente de números faça".

Como é que eu faço isso ?

While (variável != ?? )

Obrigado rapaziada !!

É que eu gostaria de validar o meu programa pra ficar mais seguro.

Postado

Irmão, ajudou sim porque conheci novas funções ! ;]

Porém, no momento, estou necessitando de algo mais 'simples'. Não quero passar das bibliotecas <stdio.h> && <stdlib.h>.

Tem algum laço, 'if' ou uma função que se encaixe nos meus parâmetros ?

Valeeu ! ;]

Postado

entendi... depende para que você quer usar isso no seu programa, mas pode usar um simples if, comparando com os respectivos códigos ASCII:


if(x >= 48 && x <= 57)

Isso se x for um char. Se for uma string, você vai ter que comparar caracter por caracter:


if(string[i] >= 48 && string[i] <= 57)

Acredito que isso funcione.

Postado

Foi o que fiz antes de postar meu querido. Só que não deu certo, ele está indo ao pé da letra e não pela ASCII.Meu programa é uma lista encadeada. Porém quero que no cadastro ele só cadastre NUMEROS no RA. Porém se ele cadastra letras dá pau.

Dá uma olhada aí irmão:

#include <stdio.h>

#include <stdlib.h>

struct aluno

{

int ra;

float med1;

float med2;

float med3;

float global;

struct aluno *prox;

};

typedef struct aluno lista;

lista *inicializa (void)

{

return NULL;

}

lista *insere (lista *l, int i)

{

lista *p;

for (p=l;p!=NULL;p=p->prox){

if (p->ra == i){

printf ("RA ja cadastrado!\n");

system("pause");

return l;

}

}

if (p == NULL){

lista *novo = (lista*) malloc (sizeof (lista));

novo -> ra = i;

novo -> prox = l;

return novo;

}

}

void imprime (lista*l)

{

lista *p;

if (l == NULL){

printf("Nao existe nehum RA cadastrado !!\n\n\n");

}

for (p=l;p!=NULL;p=p->prox){

printf ("RA = %d\nMed1: %.2f\nMed2: %.2f\nMed3: %.2f\nGlobal: %.2f\n\n",p->ra,p->med1,p->med2,p->med3,p->global);

}

}

lista *consulta (lista *l, int v)

{

lista *p;

for (p=l;p!=NULL;p=p->prox)

{

if (p->ra == v){

printf ("RA = %d\nMed1: %.2f\nMed2: %.2f\nMed3: %.2f\nGlobal: %.2f\n\n",p->ra,p->med1,p->med2,p->med3,p->global);

return p;

}

}

if (p == NULL){

printf ("RA Nao Cadastrado!!\n\n");

}

}

void *insere_all (lista *l)

{

lista *p;

for (p=l;p!=NULL;p=p->prox)

{

system("cls");

printf ("Insira 3 notas para o aluno %d:\n",*p);

scanf ("%f %f %f",&p->med1,&p->med2,&p->med3);

p->global = (p->med1+p->med2+p->med3)/3;

}

return p;

}

void *insere_one (lista *l, int num)

{

lista *p;

for (p=l;p!=NULL;p=p->prox)

{

if (p->ra == num){

printf ("Insira 3 notas para o aluno %d:\n",*p);

scanf ("%f %f %f",&p->med1,&p->med2,&p->med3);

p->global = (p->med1+p->med2+p->med3)/3;

system ("cls");

return p;

}

}

printf ("RA Nao Cadastrado !!!\n\n");

}

lista *excluir_lista (lista *l, int v)

{

lista *ant = NULL;

lista *p = l;

while (p!= NULL && p->ra != v)

{

ant = p;

p = p->prox;

}

if (p == NULL){

printf ("RA Nao Cadastrado ! Impossivel Exclui-lo\n\n");

return l;

}

if (ant == NULL)

{

l = p->prox;

free(p);

printf ("Aluno %d Excluido !\n\n",v);

return l;

}

else

{

ant->prox = p->prox;

free(p);

printf ("Aluno %d Excluido !\n\n",v);

}

return l;

}

lista *libera (lista *l){

lista *p;

while (l!= NULL)

{

p=l->prox;

free (l);

l=p;

}

return l=0;

}

int main (void){

lista *l=0;

int opcao,j,num;

char y_n;

while (opcao != 8){

system("cls");

printf ("================================================================================\n");

printf ("======================= C E N T R A L D O A L U N O ========================\n");

printf ("================================================================================\n\n");

printf ("Selecione a Opcao Desejada:\n\n");

printf ("1- Cria Lista\n\n2- Insere RA\n\n3- Insere Nota\n\n4- Consulta RA\n\n5- Imprime Lista\n\n6- Excluir Lista\n\n7- Liberar Lista\n\n8-Sair\n\n\nOpcao: ");

scanf ("%d",&opcao);

switch (opcao){

case 1:

system ("cls");

if (l!=NULL){

printf("Lista Ja Existente !\n\n");

system("pause");

system("cls");

}

else{

l=inicializa ();

printf ("Lista Criada Com Sucesso !\n\n");

system ("pause");

system("cls");

}break;

case 2:

system("cls");

printf ("Insira o RA:\n");

scanf ("%d",&j);

if (j >= 48 && j <= 57){

l = insere (l,j);

system("cls");

}

else{

printf("Insira Somente Numeros !!\n\n");

system("pause");

}break;

case 3:

system ("cls");

printf ("Inserir Para Todos Alunos ? (Y/N)");

scanf ("%s",&y_n);

while (y_n != 'y' && y_n!= 'Y' && y_n!= 'n' && y_n!= 'N'){

system("cls");

printf ("Inserir Para Todos Alunos ? (Y/N)");

scanf ("%s",&y_n);

}

if (y_n == 'Y' || y_n == 'y'){

system("cls");

insere_all (l);

system("cls");

}

else if (y_n == 'N' || y_n== 'n'){

system("cls");

printf ("Digite o RA a Ser Creditado as Notas:\n");

scanf ("%d",&num);

insere_one (l,num);

}

system ("pause");break;

case 4:

system ("cls");

printf ("Digite o RA a ser consultado:\n");

scanf ("%d",&j);

consulta (l,j);

system ("pause");

system ("cls");break;

case 5:

system("cls");

imprime (l);

system("pause");

system("cls");break;

case 6:

system("cls");

printf ("Qual aluno deseja Exluir ?\n");

scanf ("%d",&j);

l=excluir_lista(l,j);

system("pause");break;

case 7:

system ("cls");

if (l == 0 && l != NULL){

printf("Nao existe uma lista para Liberar\n\n");

system("pause");

}

else if (l == NULL){

printf ("A Lista %c Nula, Nao H%c o Que Liberar\n\n",144,160);

system("pause");

system ("cls");

}

else{

l=libera (l);

printf("Lista liberada !\n\n");

system ("pause");

system ("cls");

}break;

}

}

system("cls");

printf("Programa Encerrado !!\n\n\n");

system("pause");

getchar();

return 0;

}

Postado

O meu programa, por mais que eu coloque

if (i >= 48 && i <= 57)

Não está dando certo porque ele entende que eu tenho que cadastrar somente números entre 48 e 57. Ele não está entendendo que é referente à tabela ASCII.

O que poderá ser ?

Obrigado!

Postado

Simples, que tal você usar um scanset?? scanf("%[0123456789]");

pronto, ele só vai ler enquanto estiver sendo digitado um número. Quando for digitado um digito diferente de 0 1 2 3 4 5 6 7 8 ou 9 ele simplesmente para de ler

Arquivado

Este tópico foi arquivado e está fechado para 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...