Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ismande Jesus

Tratar entradas int e char

Recommended Posts

Estou treinando sobre arquivos, e fiz um programa simples de cadastro e pesquisa, e ele faz o que eu queria. Mas olhando melhor na função cadastro, queria uma idéia de como eu devo tratar as entradas para o usuário não inserir um inteiro no campo de string nome e não inserir uma string no campo inteiro idade. Olha o código ae.

#include <stdio.h>

main()
{
	char variavel;
	int loop = 1;

	while(loop)
	{
		printf("...>>Progwy\nConsulta(p),Cadastro(c),Sair(s):");
		scanf(" %c", &variavel);
		switch(variavel)
		{
			case 'c':
			case 'C':
				cadastro();
				break;
			case 'p':
			case 'P':
				pesquisa();
				break;
			case 's':
			case 'S':	
			    loop = 0;
			    break;
			default:
				printf("Opcao Invalida.\n");
		}
	}
}

cadastro()
{
	FILE *fp;
	FILE *idad;
	char nome[40];
	int idade;

	fp = fopen("base_nome", "a+");
	idad = fopen("base_idade", "a+");
	printf("Seu nome: ");
	scanf(" %s", &nome);
	fprintf(fp, " %s", nome);
	printf("Sua idade: ");
	scanf(" %d", &idade);
	fprintf(idad, " %d", idade);
	fclose(fp);

}

pesquisa()
{
	FILE *fp;
	FILE *idad;
	char nome[40];
	int idade;

	fp = fopen("base_nome","a+");
	printf("Arquivo base_nome aberto\n");
	idad = fopen("base_idade","a+");
	printf("Arquivo base_idade aberto\n\n\n");
	
	fscanf(fp, "%s", nome);
	printf("Arquivo linkado a variavel\n");
	fscanf(idad," %d", &idade);
	printf("Arquivo linkado a variavel\n\n\n");
	printf("Nome: %s\n", nome);
	printf("Idade: %d\n\n", idade);

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

INDIQUE O QUE AS SUAS FUNÇÕES RETORNAM!!!

 

Boa tarde.

Você pode criar uma função para verificar a existência de dígitos na string 'nome'.

Existe a função 'isdigit()' da ctype.h que verifica se o caracter é um digito decimal (0, 1, 2, 3, 4, 5, 6, 7, 8, 9).

int isdigit ( int c );

valor de retorno:

1 (true) - se 'c' for um digito decimal;

0 (false) - o contrário.

 

parâmetro:

O caráter a ser verificado com cast para inteiro. Exemplo:

char ch = '5';
if( isdigit( (int) ch ) )
	printf("É um digito decimal!");

Sabendo disso, basta criar uma função que receba como parâmetro o seu vetor contendo o nome. A função irá percorrê-lo ENQUANTO o caráter não for '\0'. SE for encontrado alguma ocorrência de digito a função pode retornar 1.

int validar (char nome[]) {
   // código, código, código...
}

Tente desenvolvê-la, na dúvida não hesite em perguntar.

 

-

DICA: Abra o arquivo para read/write somente na hora que a ação for executada, assim você não usa memória desnecessária.

Visto que o parâmetro passado para a função 'fopen' é 'a+' (criará caso não exista, manterá caso exista), não há necessidade de manter um ponteiro apontando para o arquivo enquanto a leitura da 'idade' e 'nome' são concluídas.

  1. ler nome
  2. ler idade
  3. se estiverem ok, abra o arquivo
  4. salve
  5. feche

Lembrando, é só uma 'dica'. Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm... agora entendi, no caso vou tentar desenvolver uma função que percorra os caracteres até achar o '\o'. Igual você falou. Vou dar uma estudada na biblioteca ctype.h no cpluplus. Valeu mesmo , era isso mesmo que eu tava querendo saber.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.