Ir para conteúdo

POWERED BY:

Arquivado

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

btmvdr

Cadastro de alunos

Recommended Posts

Tô fazendo esse programa pra cadastrar alunos, só que na hora de imprimir na tela os alunos cadastrados, só tá imprimindo na tela o último aluno que foi cadastrado.. Como faço pro programa mostrar todos os cadastrados na tela?
Problema também na hora que estou digitando o cadastro ele pula do telefone e vai direto pro email. Não sei como resolvo isso. sad.gif E também tá dando um erro na hora que imprime na tela o Uf e o telefone estão ficando na mesma linha e é cada um em uma linha, como ajeito isso? unsure.gif
E outra coisa, na hora de declarar ''int'' pro número e pro telefone ele não funciona, só funciona se eu declarar ''char'' ai fica char numero[5] e char telefone[12], como faço pra funcionar com int? confused.gif
Valeu!! biggrin.gif

 

 

#include<stdio.h>
#include<stdlib.h>
struct cadastro{
    char nome[50];
    char rua[50];
    char numero[5];
    char bairro[30];
    char cidade[20];
    char uf[2];
    char telefone[12];
    char email[30]; };
    

   
int main(){
    struct cadastro aux;
    FILE *ponteiroArquivo;
    int menu;
    
	while (menu!=5){
	    printf("\tCadastro de Alunos\n\n");
        printf("1 - Inserir aluno.\n");
        printf("2 - Exibir lista de alunos.\n");
        printf("3 - Sair.\n");
        printf("\n\n\n\n");
        scanf("%d",&menu);  
	
				
	switch(menu){
            case 1:
            printf("Inserir aluno, foi selecionado.\n");
                ponteiroArquivo=(fopen("arquivo.txt","a")); // "a"  - cria um arquivo novo, ou modifica um ja existente.
                    //cadastro*aux;
                    //aux = new cadastro;

                getchar();
                printf("Digite seu nome: ");
                fgets (aux.nome, 50 ,stdin);
                
                printf("Rua: ");
                fgets (aux.rua, 50 ,stdin);
             
                printf("Numero: ");
                fgets (aux.numero, 5 ,stdin);
             
                printf("Bairro: ");
                fgets (aux.bairro, 30 ,stdin);
             
                printf("Cidade: ");
                fgets (aux.cidade, 20 ,stdin);
            
                printf("UF: ");
                fgets (aux.uf , 2 ,stdin);
              
                printf("Telefone: ");
                fgets (aux.telefone, 12 ,stdin);
                
                printf("Email: ");
                fgets (aux.email , 30 ,stdin);
                
                //grava os dados no arquivo com fprintf
                fprintf(ponteiroArquivo,"\nnome:%s",aux.nome);
                fprintf(ponteiroArquivo,"\nRua:%s",aux.rua);
                fprintf(ponteiroArquivo,"\nNumero:%s",aux.numero);
                fprintf(ponteiroArquivo,"\nBairro:%s",aux.bairro);
                fprintf(ponteiroArquivo,"\nCidade:%s",aux.cidade);
                fprintf(ponteiroArquivo,"\nUF:%s",aux.uf);
                fprintf(ponteiroArquivo,"\nTelefone:%s",aux.telefone);
                fprintf(ponteiroArquivo,"\nEmail:%s",aux.email);

                fclose(ponteiroArquivo);//fecha o arquivo
                
                
                break;
            case 2:
                 printf("Exibir lista de alunos, foi selecionado.\n");
                //abre o arquivo
                ponteiroArquivo=(fopen("arquivo.txt","r")); // "a"  - cria um arquivo novo, ou modifica um ja existente.

                //usando fscanf pra ler do arquivo
 


                    //exibe na tela
                    printf("nome: %s",aux.nome);
                    printf("Rua: %s",aux.rua);
                    printf("Numero: %s",aux.numero);
                    printf("Bairro: %s",aux.bairro);
                    printf("Cidade: %s",aux.cidade);
                    printf("UF: %s",aux.uf);
                    printf("Telefone: %s",aux.telefone);
                    printf("Email: %s",aux.email);
 if(feof(ponteiroArquivo)){
                        break;
                    }

                
                fclose(ponteiroArquivo);
                break;

            case 3:
                  printf("Sair, foi selecionado.\n");
                exit(0);
                break;

        }
    }

    system("pause");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a função fwrite() para armazenar os dados (a struct inteira) no arquivo de texto.

 

fgets é para ler strings, por isso a necessidade de declarar como char, use a função scanf para ler o número que for declarado como inteiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado! Mas sou novo nisso, então onde eu coloco essa função fwrite() ? Em que parte do código? :upset:



Consegui ajeitar a parte do int e tudo mais. Só falta mesmo mostrar todos os cadastrados na tela! Alguém me mostra como faz? :cry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo:

fwrite (&aux, sizeof(struct cadastro), 1, ponteiroArquivo);
fread (&aux, sizeof(struct cadastro), 1, ponteiroArquivo);

Eu recomendo que separe o seu código. Já sabe trabalhar com funções? ex:

 

void gravardados (void)
{
    FILE *fp;
    struct cadastro _cadastro;


    printf("\nNOME: ");    fgets(_cadastro.nome, TEMP, stdin);
    printf("\nRUA: ");     fgets(_cadastro.rua, TEMP, stdin);
    printf("\nNUMERO: ");  scanf("%i%*i", &_cadastro.numero);
    printf("\nBAIRRO: ");  fgets(_cadastro.bairro, TEMP, stdin);
    printf("\nCIDADE:");   fgets(_cadastro.cidade, TEMP, stdin);
    printf("\nUF: ");      fgets(_cadastro.uf, 2, stdin);
    printf("\nTELEFONE: ");fgets(_cadastro.telefone, TEMP, stdin);
    printf("\nEMAIL: ");   fgets(_cadastro.email, TEMP, stdin);

    fp = fopen("arquivo.txt", "a");
    fwrite(&_cadastro, sizeof(struct cadastro), 1, fp);
    fclose(fp);
}
void lerdados(void)
{
    FILE *fp;
    fp = fopen("arquivo.txt", "r");

    if(!fp)
        printf("Arquivo inexistente!");
    else
    {
        struct cadastro _cadastro;
        while (!fread (&_cadastro, sizeof(struct cadastro), 1, fp))
        {
            printf("\nNOME: %s",    _cadastro.nome);
            printf("\nRUA: %s",     _cadastro.rua);
            printf("\nNUMERO: %i",  _cadastro.numero);
            printf("\nBAIRRO: %s",  _cadastro.bairro);
            printf("\nCIDADE: %s",  _cadastro.cidade);
            printf("\nUF: %s",      _cadastro.uf);
            printf("\nTELEFONE: %s",_cadastro.telefone);
            printf("\nEMAIL: %s",   _cadastro.email);
        }
    }
}

* não testei o código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei funções, sou iniciante ainda. :/ Eu te agradeço muito por estar me ajudando :D

 

Olha, dese jeito, ele tá criando o arquivo certinho, mostra no arquivo criado todos que foram cadastrados, tudo ok. Só que no próprio programa, quando aperto ''2 - Exibir lista de alunos'' ele só tá mostrando na tela, só o último cadastrado, mas no arquivo ele grava todos certinho, só que tem que mostrar todos também no programa. O código tá assim :

 

 


#include<stdio.h>
#include<stdlib.h>
struct cadastro{
    char nome[50];
    char rua[50];
    int numero;
    char bairro[30];
    char cidade[20];
    char uf[3];
    int telefone;
    char email[30]; };
    

int main(){
    struct cadastro aux;
    FILE *ponteiroArquivo;
    int menu;
      
	while (menu!=5){
        printf("\n\n");
        
        printf("Cadastro de alunos:\n");        
        printf("1 - Cadastrar Aluno.\n");
        printf("2 - Exibir lista de alunos.\n");
        printf("3 - Sair.\n");
        
        printf("\n\n");
        scanf("%d",&menu);  

			
	switch(menu){
            case 1:
            printf("Inserir aluno, foi selecionado.\n");
                ponteiroArquivo=(fopen("arquivo.txt","a")); // "a"  - cria um arquivo novo, ou modifica um ja existente.
                   
                getchar();
              
                printf("Digite seu nome: ");
                fgets (aux.nome, 50 ,stdin);
                
                printf("Email: ");
                fgets (aux.email , 30 ,stdin);
                
                printf("Telefone: ");
                scanf ("%d",&aux.telefone);
                getchar();
                printf("Rua: ");
                fgets (aux.rua, 50 ,stdin);
               
                printf("Numero: ");
                scanf ("%d",&aux.numero);
                getchar();
                printf("Bairro: ");
                fgets (aux.bairro, 30 ,stdin);
                
                printf("Cidade: ");
                fgets (aux.cidade, 20 ,stdin);
                
                printf("UF: ");
                fgets (aux.uf , 3 ,stdin);
                                            
               
                getchar();
                
                
                //grava os dados no arquivo com fprintf
                
                fprintf(ponteiroArquivo,"\nNome: %s",aux.nome);
                fprintf(ponteiroArquivo,"\nEmail: %s",aux.email);
                fprintf(ponteiroArquivo,"\nTelefone: %d",aux.telefone);
                fprintf(ponteiroArquivo,"\nRua: %s",aux.rua);
                fprintf(ponteiroArquivo,"\nNumero: %d",aux.numero);
                fprintf(ponteiroArquivo,"\nBairro: %s",aux.bairro);
                fprintf(ponteiroArquivo,"\nCidade: %s",aux.cidade);
                fprintf(ponteiroArquivo,"\nUF: %s",aux.uf);
               

                fclose(ponteiroArquivo);//fecha o arquivo
                
                
                break;
            case 2:
                 printf("Exibir lista de alunos, foi selecionado.\n");
                //abre o arquivo
                ponteiroArquivo=(fopen("arquivo.txt","r")); 
               
              
                    //exibe na tela
                    
                     
   
                    printf("\nNome: %s",aux.nome);                   
                    printf("Email: %s",aux.email);
                    printf("Telefone: %d",aux.telefone);
                    printf("\nRua: %s",aux.rua);
                    printf("Numero: %d",aux.numero);
                    printf("\nBairro: %s",aux.bairro);
                    printf("Cidade: %s",aux.cidade);
                    printf("UF: %s",aux.uf);
                    
 if(feof(ponteiroArquivo)){ 
                        break;
                    }

                
                fclose(ponteiroArquivo);
                break;

            case 3:
                  printf("Sair, foi selecionado.\n");
                exit(0);
                break;

        }
    }

    system("pause");
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficaria dessa forma a função? Só que se for assim, está dando erro! :(

 

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

void inserir ();
void exibir ();
void sair ();


struct cadastro {
       char nome   [50];
       char rua    [50];
       int numero    [10];
       char bairro [30];
       char cidade [30];
       char uf     [3];
       int telefone     [12];
       char email  [30];
                };
    
    int main(){
    struct cadastro;
    FILE *ponteiroArquivo;
    int menu;
    
    
    while (menu!=5){
        printf("\n\n");
        
        printf("Cadastro de alunos:\n");
       
        printf("1 - Cadastrar Aluno.\n");
        printf("2 - Exibir lista de alunos.\n");
        printf("3 - Sair\n");
       
        printf("\n\n");
        scanf("%d",&menu);               
        
    switch(menu){
                 case 1:
                      inserir();
                      break;
                 case 2:
                      exibir();
                      break;
                 case 3:
                      sair();
                      break;
                 default:
                         printf("Opcao Invalida.\n"); 
                         
                         }}}
                         
     void inserir (void) {
     FILE *ponteiroArquivo;      
     struct cadastro_cadastro;
     
    printf("\nNOME: ");    fgets(_cadastro.nome, TEMP, stdin);
    printf("\nRUA: ");     fgets(_cadastro.rua, TEMP, stdin);
    printf("\nNUMERO: ");  scanf("%i%*i", &_cadastro.numero);
    printf("\nBAIRRO: ");  fgets(_cadastro.bairro, TEMP, stdin);
    printf("\nCIDADE:");   fgets(_cadastro.cidade, TEMP, stdin);
    printf("\nUF: ");      fgets(_cadastro.uf, 2, stdin);
    printf("\nTELEFONE: ");fgets(_cadastro.telefone, TEMP, stdin);
    printf("\nEMAIL: ");   fgets(_cadastro.email, TEMP, stdin);

    ponteiroArquivo = fopen("arquivo.txt", "a");
    fwrite(&_cadastro, sizeof(struct cadastro), 1, ponteiroArquivo);
    fclose(ponteiroArquivo);
}                       

    void exibir (void){
         FILE *ponteiroArquivo;    
         ponteiroArquivo = fopen("arquivo.txt", "r");

    if(!ponteiroArquivo)
        printf("Arquivo inexistente!");
    else
    {
        struct cadastro _cadastro;
        while (!fread (&_cadastro, sizeof(struct cadastro), 1,  ponteiroArquivo))
        {
            printf("\nNOME: %s",    _cadastro.nome);
            printf("\nRUA: %s",     _cadastro.rua);
            printf("\nNUMERO: %d",  _cadastro.numero);
            printf("\nBAIRRO: %s",  _cadastro.bairro);
            printf("\nCIDADE: %s",  _cadastro.cidade);
            printf("\nUF: %s",      _cadastro.uf);
            printf("\nTELEFONE: %d", _cadastro.telefone);
            printf("\nEMAIL: %s",   _cadastro.email);
        }
    
}

void sair(void){
     exit(0);}

     system("pause");
     return 0 ;
     }

 

 

Dessa forma tá dando esses problemas:

In function `void inserir()':

57 `_cadastro' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

57 `TEMP' undeclared (first use this function)

In function `void exibir()':

94 expected primary-expression before "void"

94 expected `;' before "void"

98 return-statement with a value, in function returning 'void'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. Então esqueça por enquanto o uso de funções, para não dar um nó na sua cabeça. Tente isto no primeiro código que enviou:

case 2:{
	ponteiroArquivo = open("arquivo.txt", "r");
	
	if (!ponteiroArquivo)
		printf("\nArquivo Inexistente!");
		
	else
	{
		/* fread() retorna 1 enquanto for diferente de NULL.
   		Então estamos dizendo aqui: Enquanto o retorno não for NULL... */
		while (!fread (&aux, sizeof(struct cadastro), 1, ponteiroArquivo))
		{
			printf("\nNOME: %s", aux.nome);
    		printf("\nRUA: %s", aux.rua);
    		printf("\nNUMERO: %i", aux.numero);
    		printf("\nBAIRRO: %s", aux.bairro);
    		printf("\nCIDADE: %s", aux.cidade);
    		printf("\nUF: %s", aux.uf);
    		printf("\nTELEFONE: %s", aux.telefone);
    		printf("\nEMAIL: %s", aux.email);
		}
		
		fclose (ponteiroArquivo);	
	}
	break;
}

Veja se resolve.

 

Fread: http://www.cplusplus.com/reference/cstdio/fread/

Fwrite: http://www.cplusplus.com/reference/cstdio/fwrite/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai fica assim:

#include<stdio.h>
#include<stdlib.h>
struct cadastro{
    char nome[50];
    char rua[50];
    int numero;
    char bairro[30];
    char cidade[20];
    char uf[3];
    int telefone;
    char email[30]; };
    

int main(){
    struct cadastro aux;
    FILE *ponteiroArquivo;
    int menu;
      
	while (menu!=5){
        printf("\n\n");
        
        printf("Cadastro de alunos:\n");        
        printf("1 - Cadastrar Aluno.\n");
        printf("2 - Exibir lista de alunos.\n");
        printf("3 - Sair.\n");
        
        printf("\n\n");
        scanf("%d",&menu);  

			
	switch(menu){
            case 1:
            printf("Inserir aluno, foi selecionado.\n");
                ponteiroArquivo=(fopen("arquivo.txt","a")); // "a"  - cria um arquivo novo, ou modifica um ja existente.
                   
                getchar();
              
                printf("Digite seu nome: ");
                fgets (aux.nome, 50 ,stdin);
                
                printf("Email: ");
                fgets (aux.email , 30 ,stdin);
                
                printf("Telefone: ");
                scanf ("%d",&aux.telefone);
                getchar();
                printf("Rua: ");
                fgets (aux.rua, 50 ,stdin);
               
                printf("Numero: ");
                scanf ("%d",&aux.numero);
                getchar();
                printf("Bairro: ");
                fgets (aux.bairro, 30 ,stdin);
                
                printf("Cidade: ");
                fgets (aux.cidade, 20 ,stdin);
                
                printf("UF: ");
                fgets (aux.uf , 3 ,stdin);
                                            
               
                getchar();
                
                
                //grava os dados no arquivo com fprintf
                
                fprintf(ponteiroArquivo,"\nNome: %s",aux.nome);
                fprintf(ponteiroArquivo,"\nEmail: %s",aux.email);
                fprintf(ponteiroArquivo,"\nTelefone: %d",aux.telefone);
                fprintf(ponteiroArquivo,"\nRua: %s",aux.rua);
                fprintf(ponteiroArquivo,"\nNumero: %d",aux.numero);
                fprintf(ponteiroArquivo,"\nBairro: %s",aux.bairro);
                fprintf(ponteiroArquivo,"\nCidade: %s",aux.cidade);
                fprintf(ponteiroArquivo,"\nUF: %s",aux.uf);
               

                fclose(ponteiroArquivo);//fecha o arquivo
                
                
                break;
       case 2:{
	ponteiroArquivo = fopen("arquivo.txt", "r");
	
	if (!ponteiroArquivo)
		printf("\nArquivo Inexistente!");
		
	else
	{
		/* fread() retorna 1 enquanto existir dado e 0 caso seja NULL.
   		Então estamos dizendo aqui: Enquanto o retorno não for 0... */
		while (!fread (&_cadastro, sizeof(struct cadastro), 1, ponteiroArquivo))
		{
		printf("\nNOME: %s", aux.nome);
    		printf("\nRUA: %s", aux.rua);
    		printf("\nNUMERO: %i", aux.numero);
    		printf("\nBAIRRO: %s", aux.bairro);
    		printf("\nCIDADE: %s", aux.cidade);
    		printf("\nUF: %s", aux.uf);
    		printf("\nTELEFONE: %s", aux.telefone);
    		printf("\nEMAIL: %s", aux.email);
		}
		
		fclose (ponteiroArquivo);	
	}
	break;
}
                
                fclose(ponteiroArquivo);
                break;

            case 3:
                  printf("Sair, foi selecionado.\n");
                exit(0);
                break;

        }
    }

    system("pause");
    return 0;
}

E da o seguinte erro:

 

In function `int main()':

93 `_cadastro' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

 

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei pra aux. Só que agora quando aperto a opção 2 pra exibir a lista de alunos, não aparece nada, volta pro menu pra selecionar a opção ):

Compartilhar este post


Link para o post
Compartilhar em outros sites
while (fread (&aux, sizeof(struct cadastro), 1, ponteiroArquivo))

Tire o "!" do fread.

E tire aquele " fclose(ponteiroArquivo); break ". Você está fechando o arquivo duas vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei o que você falou e continua sem imprimir nada na tela. Mas no documento de texto que ele cria, fica tudo armazenado certo :/

 

O código tá assim, oh. Fiz algo errado com as mudanças que você mandou?

 

#include<stdio.h>
#include<stdlib.h>
struct cadastro{
    char nome[50];
    char rua[50];
    int numero;
    char bairro[30];
    char cidade[20];
    char uf[3];
    int telefone;
    char email[30]; };
    

int main(){
    struct cadastro aux;
    FILE *ponteiroArquivo;
    int menu;
      
	while (menu!=5){
        printf("\n\n");
        
        printf("Cadastro de alunos:\n");        
        printf("1 - Cadastrar Aluno.\n");
        printf("2 - Exibir lista de alunos.\n");
        printf("3 - Sair.\n");
        
        printf("\n\n");
        scanf("%d",&menu);  

			
	switch(menu){
            case 1:
            printf("Inserir aluno, foi selecionado.\n");
                ponteiroArquivo=(fopen("arquivo.txt","a")); // "a"  - cria um arquivo novo, ou modifica um ja existente.
                   
                getchar();
              
                printf("Digite seu nome: ");
                fgets (aux.nome, 50 ,stdin);
                
                printf("Email: ");
                fgets (aux.email , 30 ,stdin);
                
                printf("Telefone: ");
                scanf ("%d",&aux.telefone);
                getchar();
                printf("Rua: ");
                fgets (aux.rua, 50 ,stdin);
               
                printf("Numero: ");
                scanf ("%d",&aux.numero);
                getchar();
                printf("Bairro: ");
                fgets (aux.bairro, 30 ,stdin);
                
                printf("Cidade: ");
                fgets (aux.cidade, 20 ,stdin);
                
                printf("UF: ");
                fgets (aux.uf , 3 ,stdin);
                                            
               
                getchar();
                
                
                //grava os dados no arquivo com fprintf
                
                fprintf(ponteiroArquivo,"\nNome: %s",aux.nome);
                fprintf(ponteiroArquivo,"\nEmail: %s",aux.email);
                fprintf(ponteiroArquivo,"\nTelefone: %d",aux.telefone);
                fprintf(ponteiroArquivo,"\nRua: %s",aux.rua);
                fprintf(ponteiroArquivo,"\nNumero: %d",aux.numero);
                fprintf(ponteiroArquivo,"\nBairro: %s",aux.bairro);
                fprintf(ponteiroArquivo,"\nCidade: %s",aux.cidade);
                fprintf(ponteiroArquivo,"\nUF: %s",aux.uf);
               

                fclose(ponteiroArquivo);//fecha o arquivo
                
                
                break;
       case 2:{
            printf("Exibir lista de alunos, foi selecionado.\n");
	ponteiroArquivo = fopen("arquivo.txt", "r");
	
	if (!ponteiroArquivo)
		printf("\nArquivo Inexistente!");
		
	else
	{
		/* fread() retorna 1 enquanto existir dado e 0 caso seja NULL.
   		Então estamos dizendo aqui: Enquanto o retorno não for 0... */
		while (fread (&aux, sizeof(struct cadastro), 1, ponteiroArquivo))
		{
		printf("\nNOME: %s", aux.nome);
		printf("\nEMAIL: %s", aux.email);
        printf("\nTELEFONE: %d", aux.telefone);
        printf("\nRUA: %s", aux.rua);
        printf("\nNUMERO: %d", aux.numero);
        printf("\nBAIRRO: %s", aux.bairro);
        printf("\nCIDADE: %s", aux.cidade);
        printf("\nUF: %s", aux.uf);
		break;

                
            

            case 3:
                  printf("Sair, foi selecionado.\n");
                exit(0);
                break;

        }
    }

    system("pause");
    return 0;
}}}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi como esse código seu rodou, estão faltando duas chaves no final do "case 2: "...

Olhei o seu código e está (aparentemente) certo. Está semelhante ao que fiz para testar, então creio que o problema seja somente as chaves que esqueceu.

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

#define TEMP 128

struct endereco
{
    char
    rua     [TEMP], bairro  [TEMP],
    cidade  [TEMP], uf      [TEMP];

    int
    numero;
};

struct info
{
    char
    nome [TEMP], email [TEMP], telefone [TEMP];
    struct endereco end;
};

int setData (void)
{
    struct info _info;

    getchar(); // sujeira.
    printf("\nNome: ");       fgets(_info.nome, TEMP, stdin);
    printf("\nEmail: ");      fgets(_info.email, TEMP, stdin);
    printf("\nTelefone: ");   fgets(_info.telefone, TEMP, stdin);
    printf("\nRua: ");        fgets(_info.end.rua, TEMP, stdin);
    printf("\nNumero: ");     scanf("%i", &_info.end.numero);
    getchar(); // sujeira.
    printf("\nBairro: ");     fgets(_info.end.bairro, TEMP, stdin);
    printf("\nCidade: ");     fgets(_info.end.cidade, TEMP, stdin);
    printf("\nUF: ");         fgets(_info.end.uf, TEMP, stdin);

    FILE *file;
    file = fopen("arquivo.txt", "a");
    fwrite (&_info, sizeof(struct info), 1, file);
    fclose (file);

    return 0;
}

int getData (void)
{
    FILE *file;
    file = fopen ("arquivo.txt", "r");
    if (!file)
        return 1;
    else
    {
        struct info _info;
        while (fread(&_info, sizeof(struct info), 1, file))
        {
            printf("\nNome: %s", _info.nome);
            printf("\nEmail: %s", _info.email);
            printf("\nTelefone: %s", _info.telefone);
            printf("\nRua: %s", _info.end.rua);
            printf("\nNumero: %i", _info.end.numero);
            printf("\nBairro: %s", _info.end.bairro);
            printf("\nCidade: %s", _info.end.cidade);
            printf("\nUF: %s", _info.end.uf);
        }
        fclose(file);
    }
    return 0;
}

int main (void)
{
    int opt;

    while (1)
    {
        do{
            printf("\n\n1 - Cadastrar Aluno.\n");
            printf("\n2 - Exibir lista de alunos.\n");
            printf("\n3 - Sair.\n");
            scanf("%i", &opt);
        } while ((opt < 1) && (opt > 3));

        switch (opt)
        {
            case 1:
                if(setData() == 0)
                    printf("\nAluno cadastrado!");
                break;

            case 2:
                if(getData() == 1)
                    printf("\nErro ao abrir o arquivo!");
                break;
            case 3:
                exit(0);
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim do forma que você fez, ele funciona, muuuito obrigado!! :worship:

Mas eu fui olhar o arquivo txt que ele cria, e agora está dando problema nele, não fica mais os cadastrados, agora fica ando coisas assim:

 

fulano
a b a l h o 1 . e x e D àOD D X@D ˆü( ÿ ¤ü( D ÀGD ¤ü( ô:`w ·–L ü( ‰ôÜv Úv›ôÜv ¯ÚvO–Lð h fulano@hotmail.com
»?äv×æd:þÿÿÿ¯Úv³Ãîv €@÷v · ÷v ÷v lü( )òívü h ¬ü(
Äîv ÖÂîv%L”L22448877
Ðh |ü( ðþ( ÕŒïvQrR:þÿÿÿ )÷vÈü( ÅÄîv )÷vØü( _ºñv )÷v )÷vo d ¼þ( jìîv
)÷v )÷v+íîv$ÿ( Ð+÷vHh fulanos
ÿ( ^ Dÿ( h Xý( 00@ #;` )÷v ÿ Ph
A DD œý( ©¥Ûv D DD Ph þ( h'h fulaninho
8ED ¨DD ¸ý( ˆh À Ðý( B u@ À Ä h aaaa Ä h h'h c'h aaa h GCC@ý( H-2-fula
dw‹H þÿÿÿ$
h b'h \þ( ‡òívòívÕN”L $ ÷v ÷v$ Xþ( )òív
h ˜þ( 1Aîv AîvN”L )÷v Øh fn
ÿ( ÕŒïvñR: ;÷v @ )÷v´þ( B¤ívX÷vÀþ( üñív ÿ( –hôv )÷v€hôv‰O”L @ Ôþ( ‘O”LÄÿ( ÕŒïv)ØH:þÿÿÿk
:unsure:
Aaah, e deixa eu te perguntar uma coisinha. :pinch:
Tem como fazer pro primeiro cadastrado, mostrar matricula 1, pro segundo cadastrado matricula 2, pro terceiro cadastrado matricula 3 e assim por diante? Tem que botar algum contador ou algo assim pra ele mostrar isso? Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O importante será o arquivo de texto ou o que será exibido na tela do console?

Sobre gerar código automático: Sim, use a função fseek para voltar o ponteiro dentro do arquivo de texto. Pegue o último número cadastrado e acrescente +1.

 

-> http://www.cplusplus.com/reference/cstdio/fseek/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dois, tem que está mostrando na tela pro usuário os cadastrados e dentro do arquivo de texto tem que constar todos os cadastrados :/

 

Ok, obrigado, vou tentar fazer com fseek então o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Normalmente, informações de cadastro são armazenadas em um arquivo de forma que outras pessoas não possam ler o seu conteúdo.

Se quiser que o conteúdo do arquivo possa ser lido, use as funções: fputs() e fgets(), salvando de string em string. Porém você precisará criar um algoritmo para verificar quando uma linha e quando um registro termina.

 

Bom, crie um campo inteiro dentro da struct para salvar o código de cada matricula. Você vai precisar ter ele salvo em algum lugar, para poder acessá-lo e acrescentar +1 para a próxima matricula.

 

struct info
{
    char
    nome [TEMP], email [TEMP], telefone [TEMP];
    int codigo; // <-- 
    struct endereco end;
};

Faz tempo que não utilizo a função fseek, mas creio que para gerar um código sequencial, basta criar uma função assim:

*não testado.

int NovoCodigo (void)
{
    FILE *file; file = fopen("arquivo.txt", "rb");
    if (!file)
        return 1; // é o primeiro registro.
    else
    {
        struct info _info;
        fseek (file, -1 * sizeof(struct info), SEEK_END);
        int codigo = _info.codigo; // pega o número do último registro...
        fclose(file);
    }
    return codigo + 1; //... e acrescenta a ele mais um.
}

Assim, bastaria chamar a função de gerar código dentro da função de cadastro. Algo assim:

int setData (void)
{
    struct info _info;
    
    getchar();
    _info.codigo = NovoCodigo(); // pega o retorno da função e atribui ao campo codigo.
    printf("Matricula numero: %i", _info.codigo);
    
    // ... resto do código
}

=)

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.