Ajuda em C

3 respostas
B
Pessoal fiz o seguinte código tem como objetivo cadastrar um aluno e seu RA, tenho que fazer uma consulta pelo RA. so que não estou conseguindo mostrar o resultado certo. coloco o RA que quero, só que dai o programa fecha. Se alguém puder me ajudar agradeço
#include<stdio.h>  //entrada e saida de arquivos
#include<stdlib.h>//biblioteca do sistema
#include<conio.h>//biblioteca do getch()
#include<string.h>//biblioteca para ler string
    
struct cadastro
{
    char nome[30];
    int ra;
     
};


int main(){
   	
   	struct cadastro aluno;
    FILE *trabalho; // arquivo txt
    int op, procura;
    char nomeArquivo[14] = "cadastro2.txt";
    char caracSeparador[] = " ";
    
    
    do{
    
    	system("cls");
        printf("\t\t=== Faculdade Clock ===\n\n");
        printf("1. Incluir Aluno\n");
        printf("2. Alunos Matriculados\n");
        printf("3. Consultar Aluno\n");
        printf("Qualquer outra tecla para sair.\n");
        printf("\nDigite sua opcao: ");
        scanf("%d",&op);
        system("cls");
        
        switch(op){
        
                 // cadastro 
                 case 1:
                      
                      printf("Nome do aluno: ");
                      fflush(stdin);
                      gets(aluno.nome);
                      
                      printf("Informe o RA do aluno: ");
                      fflush(stdin);
                      scanf("%d",&aluno.ra); 
                      
                      // se der erro na abertura do arquivo
                      if((trabalho = fopen(nomeArquivo, "at")) == NULL){
                          printf("Erro na abertura do arquivo %s.\n", nomeArquivo);
                          system("pause"); /* para WINDOWNS */
                          exit(-1);  /* abandona a execucao do programa */
                      
                      } else {
                          
                          fprintf(trabalho, "%s", aluno.nome);
                          fprintf(trabalho, "%s", caracSeparador);
                          fprintf(trabalho, "%d", aluno.ra);
                          fprintf(trabalho, "%s", caracSeparador);
                         
                         

                          // fecha o arquivo
                          fclose(trabalho);
                      }
                      break;
        
                 // relatorio
                 case 2:
                      
                    if((trabalho = fopen(nomeArquivo, "rt")) == NULL){
                    
                        printf("Erro na abertura do arquivo %s.\n", nomeArquivo);
                        system("pause"); // para WINDOWNS
                        exit(-1);  // abandona a execucao do programa
                    
                    } else {
                    
                        char linha[100];
                        int i = 1;
                                
                        printf("Aluno Matriculados:\n\n"); 
                        
                        for (; !feof(trabalho); i++) {
                            if (fgets(linha, 100, trabalho)){  // Se foi possível ler
                             
                               printf("%s", linha);
                                   
                            }// fecha if
                        }// fecha for
                        
                        fclose(trabalho);
                        printf("\n\n\n");
                        system("pause");
                    }
                    break;
                 
                 case 3:
                       if((trabalho = fopen(nomeArquivo, "rt")) == NULL){
                    
                        printf("Erro na abertura do arquivo %s.\n", nomeArquivo);
                        system("pause"); // para WINDOWNS
                        exit(-1);  // abandona a execucao do programa
                    
                       } else { 
                       printf("Informe o RA do aluno\n");
                       scanf("%d",&procura);
                         
                         while (fread(&aluno,sizeof(aluno),1,trabalho) == 1){

                         if (aluno.ra == procura){
                            printf("nome  : %s\n",aluno.nome);
                           }
                }
                fclose(trabalho);
                         
                          //if(procura == aluno.ra){
                         // fprintf(trabalho, "%s", aluno.nome);
                         // fprintf(trabalho, "%s", caracSeparador);           
                         // }
                           
                       }//fecha o else
                 
                 
                 default:
                         printf("\n\t !!! Faculdade Clock !!!\n\n\n");
                         system("pause");
                 
        } // fecha switch
         
    } while(op == 1 || op == 2);
    
    //system("pause");
    return 0;	
}

3 Respostas

J

Deixe-me ver…

Você está jogando tudo num txt, ok?
Você já olhou se está tudo sendo salvo de maneira correta, nesse txt? Que esse RA e nome realmente foi gravado?

Se sim, o problema é na hora da consulta…

Estou um pouco enferrujado em C mas, o que você tentou fazer aqui?
Lembro que quando fazia buscas em txt, eu procurava linha por linha…

O que esse while faz?
Na comparação: aluno.ra == procura , quando que a variável ‘aluno.ra’ recebe o valor certo do txt?

scanf("%d",&procura);  
                           
                         while (fread(&aluno,sizeof(aluno),1,trabalho) == 1){  
  
                         if (aluno.ra == procura){  
                            printf("nome  : %s\n",aluno.nome);  
                           }
C

fread = arquivo binario
fgets = arquivo texto

Voce ta gravando como texto e tentando ler como binario…

Falta um break case 3 …
quando op = 3 seu programa tambem vai encerrar, por isso depois de uma tentativa
de consulta o programa fecha.

Dica : use funçoes, nao coloque td no main, fazendo isso vai ficar mais facil corrigir erros.

E

De modo geral, em C, se um método tiver mais de 30/40 linhas, você está fazendo algo errado.
Não programe no método “Aurora” (ou seja, “orientado a linguiça”)

Criado 3 de dezembro de 2012
Ultima resposta 3 de dez. de 2012
Respostas 3
Participantes 4