Ir ao conteúdo
  • Cadastre-se
xagun

função file

Recommended Posts

Galerinhaa, to tentando importar dados de um .txt q criei pra salvar no meu vetor de structs e tá dando errooo,

Alguém pode me dizer o problema ? thxx segue o código.

struct soft{
	
int codigo;
char nome[TAM];
float versao;
int ano;
char function[TAM];
char tam[TAM];

}; // Antes da MAIN

main(){
  struct soft vet_cadastro[100];
case 6:
	system("cls");
	if (Importar_dados (vet_cadastro) == -1)
       printf ("ERRO na importacao do Arquivo !\n");
     break;
} // Declarei isso na main , em um switch case :)


int Importar_dados (struct soft vet_cadastro[TAM])
{
	int *size;
	int i = 0;
    FILE *import;
    *size = 0;
    char arquivo[30];
    printf("Nome do arquivo para importacao: ");
    gets(arquivo);
    strcat(arquivo, ".txt");
    import = fopen (arquivo, "r");
    if (import == NULL)
        return (-1);
  
        
    while (!feof (import))
    { 
        
        		fscanf(import,"%s\n",vet_cadastro[i].nome);
                fscanf(import,"%.1f\n", &vet_cadastro[i].versao);
                fscanf(import,"%d\n", &vet_cadastro[i].ano);
                fscanf(import,"%s\n",vet_cadastro[i].function);
                fscanf(import,"%s\n",vet_cadastro[i].tam);
                
              i++;  
    }
    fclose (import);
    return (1);
}

PS: Quando compilo o código e escrevo o nome do arquivo existente na pasta em formato .txt, o programa dá erro e fecha ):

 

Capturar.JPG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o erro é que você está declarando um ponteiro e atribuindo um valor sem alocar.

Citação

int *size;

*size = 0;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema provavelmente está na leitura dos dados do arquivo, tenta sem os '\n' nos fscanf()... Também notei que na struct também tem uma variável inteira "codigo", mas os valores dessa variável não estão sendo obtidos na leitura do arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, isrnick disse:

O problema provavelmente está na leitura dos dados do arquivo, tenta sem os '\n' nos fscanf()... Também notei que na struct também tem uma variável inteira "codigo", mas os valores dessa variável não estão sendo obtidos na leitura do arquivo.

 

11 horas atrás, MassakiMsk disse:

Provavelmente o erro é que você está declarando um ponteiro e atribuindo um valor sem alocar.

 

Fiz as duas coisas e continuou o mesmo erro..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você não posta o arquivo? Isso é mais importante que mostrar seu código, se não vamos ficar trabalhando em suposições.

Compartilhar este post


Link para o post
Compartilhar em outros sites
37 minutos atrás, vangodp disse:

Por que você não posta o arquivo? Isso é mais importante que mostrar seu código, se não vamos ficar trabalhando em suposições.

Não postei porque o código é grande e já me avisaram aqui p evitar postar códigos muito extensos sem necessidades... 
Enfim, segue o mesmo.

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define TAM 100

int i_cad;


struct soft{
	
//int codigo;
char nome[TAM];
float versao;
int ano;
char function[TAM];
char tam[TAM];

};



char * cadastrar(struct soft vet_cadastro[TAM], char * nome);
void consult(struct soft vet_cadastro[TAM]);
int alterar(struct soft vet_cadastro[TAM]);
void consult_versao(struct soft vet_cadastro[TAM]);
void consult_ano(struct soft vet_cadastro[TAM]);
void consult_tam(struct soft vet_cadastro[TAM]);
int verifica_nome(struct soft vet_cadastro[TAM], char * nome);
void listar(struct soft vet_cadastro[TAM]);
int Exportar_dados (struct soft vet_cadastro[TAM]);
int Importar_dados (struct soft vet_cadastro[TAM]);

int main(int argc, char *argv[]) {
	
	struct soft vet_cadastro[TAM];	
	char Chave1[10], Chave2[10];
	int x, a=1, b=1, cont;
	int m, f;
	int size;
	char call;
	char nome[50];
	int num;
	int codigo;
	char v1;
	int retorno;
	m = 0;
	f = 0;
	
	printf("\n                       --------Bem-Vindo--------\n\n");
	printf("\n\t\t  ** BIBLIOTECA DE SOFTWARE LIVRE **");
	
do{
		printf("\n\nChave1:  ");
		gets(Chave1);
		fflush(stdin);
		printf("\nChave2:  ");
		gets(Chave2);
		fflush(stdin);
		a = strcmp(Chave1, "l");
		b = strcmp(Chave2, "d");
			
		if (a != 0 || b != 0)
			printf("\n                       Chave Incorreta\n\n                   ----Tente Novamente----");
			
	
	}while(a != 0 || b != 0);
	
	
			printf("\n                          ----Login Efetuado----\n\n");
			getch();
		
        system("cls");
      	  
			 	
	do{		
		
		printf("\n\nEscolha uma das opções abaixo: \n\n");
		printf("1- Cadastrar SOFTWARE \n2- Consultar SOFTWARE \n3- Alterar cadastro \n4- Listar \n5- Exportar em ARQUIVO \n6- Importar ARQUIVO \n7- Sair <- \n");
		printf("\nOpcao: ");
		scanf("%d", &m);
		fflush(stdin);
		
		switch(m){
			case 1: 
				system("cls");
				printf("\nNome do SOFTWARE: ");
				gets(nome);
				retorno=0;
				retorno = verifica_nome(vet_cadastro, nome);					
					
			if (retorno == 1){	
																					
					cadastrar(vet_cadastro, nome);
					printf("\n\n\t   Cadastro realizado com sucesso !");
					getch();
					system("cls");			
					break;
			}else { 
				system("cls");
				printf("\n\tSoftware Ja cadastrado !");
				getch();
				break; 
			} 
					
			case 2:
				
			do{	system("cls");
				printf("                         \n\n...:::Tipo de Consulta:::...");
				printf("\n\n\n1- Consulta por nome \n2- Consultar por Versao \n3- Consulta por Ano \n4- Consulta por Tamanho \n5- Voltar <- \n");
				printf("\nOpcao: ");
				scanf("%d", &num);
					switch(num){
							case 1:
								system("cls");
								consult(vet_cadastro);
								getch();
								system("cls");
								break;
								
							case 2:
								system("cls");
								consult_versao(vet_cadastro);
								getch();
								system("cls");
								break;
									
							case 3:
								system("cls");
								consult_ano(vet_cadastro);
								getch();
								system("cls");
								break;
								
							case 4:
								system("cls");
								consult_tam(vet_cadastro);
								getch();
								system("cls");
								break;
							
							case 5:
								printf("\n\t\t     ** Voltando para Menu principal **");
								printf("\n");
								getch();
								system("cls");
								break;
									
							default:
									system("cls");
			    					printf("\n\nOpcao Invalida\n\n");
									break;							
				} 
			}while(num != 5);
					break;
					
				case 3:
					system("cls");
				 	
                    alterar(vet_cadastro);
                    system("cls");
                    break;
				
				case 4:
					system("cls");
					listar(vet_cadastro);
					getch();
					system("cls");
					break;
				
				case 5:
					system("cls");
						if (Exportar_dados (vet_cadastro) == -1)
        						printf ("ERRO na criação do Arquivo !\n");
        			break;				
				
				case 6: 
					system("cls");
						if (Importar_dados (vet_cadastro) == -1)
								printf("Erro na importacao do Arquivo!\n");
					break;		
					
				case 7:
					system("cls");
					printf("\n\n\t\t\t\t** ADEUS ! **\n\n");
					getch();
					break;	
					
				default:
					system("cls");
			    	printf("\n\nOpcao Invalida\n\n");
					break;	
															
			}
			}while(m != 6);
		
	
	return 0;
}

void listar(struct soft vet_cadastro[TAM]){
		
	int i;
		for (i=0; i < i_cad; i++){
			
				printf("\n Nome: %s", vet_cadastro[i].nome);
                printf("\n Versao: %.1f", vet_cadastro[i].versao);
                printf("\n Ano: %d", vet_cadastro[i].ano);
                printf("\n Funcionalidade: %s", vet_cadastro[i].function);
                printf("\n Tamanho: %s", vet_cadastro[i].tam);
                printf("\n\n");
                
		} return;	
	
}

char * cadastrar(struct soft vet_cadastro[TAM], char * nome){
	
	
	if(i_cad > 100)return 0;
	char call;
	


		
			
			strcpy(vet_cadastro[i_cad].nome, nome);
			
			fflush(stdin);
			printf("Versao: ");
			scanf("%f", &vet_cadastro[i_cad].versao);
			fflush(stdin);
			printf("Ano: ");
			scanf("%d", &vet_cadastro[i_cad].ano);
			fflush(stdin);
			printf("Funcionalidade: ");
			gets(vet_cadastro[i_cad].function);
			fflush(stdin);
			printf("Tamanho: ");
			gets(vet_cadastro[i_cad].tam);
			fflush(stdin);

			

			i_cad++;
			


	
	}

void consult(struct soft vet_cadastro[TAM]){
	
	char nome[30];
	int i = 0;
	
	printf("\nDigite o nome: ");
	scanf("%s", nome);
	
	for ( i = 0; i < TAM; i++ )
    {
        if (strcmp(vet_cadastro[i].nome, nome) == 0 )
        {
                  
                printf("\n Nome: %s", vet_cadastro[i].nome);
                printf("\n Versao: %.1f", vet_cadastro[i].versao);
                printf("\n Ano: %d", vet_cadastro[i].ano);
                printf("\n Funcionalidade: %s", vet_cadastro[i].function);
                printf("\n Tamanho: %s", vet_cadastro[i].tam);
                printf("\n\n");
                return;
             	
}else if (i == 99 && strcmp(vet_cadastro[99].nome, nome)){
				printf("\n\tNome nao cadastrado !");
				return;
				
}
}				
}

void consult_versao(struct soft vet_cadastro[TAM]){
	
	float versao;
	int i = 0;
	
	printf("\nInforme a Versao: ");
	scanf("%f", &versao);
	
	for ( i = 0; i < TAM; i++ )
    {
        if (vet_cadastro[i].versao == versao)  
        {
                  
                printf("\n Nome: %s", vet_cadastro[i].nome);
                printf("\n Versao: %.1f", vet_cadastro[i].versao);
                printf("\n Ano: %d", vet_cadastro[i].ano);
                printf("\n Funcionalidade: %s", vet_cadastro[i].function);
                printf("\n Tamanho: %s", vet_cadastro[i].tam);
                printf("\n\n");
                return;
               	
}else if (i == 99 && vet_cadastro[99].versao == versao){
				printf("\n\tVersao nao cadastrada !");
				return;
				
}				
}
}

void consult_ano(struct soft vet_cadastro[TAM]){
	
	int ano;
	int i = 0;
	
	printf("\nInforme o Ano: ");
	scanf("%d", &ano);
	
	for ( i = 0; i < TAM; i++ )
    {
        if (vet_cadastro[i].ano == ano)  
        {
                  
                printf("\n Nome: %s", vet_cadastro[i].nome);
                printf("\n Versao: %.1f", vet_cadastro[i].versao);
                printf("\n Ano: %d", vet_cadastro[i].ano);
                printf("\n Funcionalidade: %s", vet_cadastro[i].function);
                printf("\n Tamanho: %s", vet_cadastro[i].tam);
                printf("\n\n");
                return;
                
            	}else if (i == 99 && vet_cadastro[99].ano == ano){
				printf("\n\tAno nao cadastrado !");
				return;
				
}			
}
}

void consult_tam(struct soft vet_cadastro[TAM]){
	
	char tam[TAM];
	int i = 0;
	
	printf("\nInforme o Tamanho: ");
	scanf("%s", tam);
	
	for ( i = 0; i < TAM; i++ )
    {
        if (strcmp(vet_cadastro[i].tam, tam) == 0 ) 
        {
                  
                printf("\n Nome: %s", vet_cadastro[i].nome);
                printf("\n Versao: %.1f", vet_cadastro[i].versao);
                printf("\n Ano: %d", vet_cadastro[i].ano);
                printf("\n Funcionalidade: %s", vet_cadastro[i].function);
                printf("\n Tamanho: %s", vet_cadastro[i].tam);
                printf("\n\n");
                return;
                
        }else if (i == 99 && strcmp(vet_cadastro[99].tam, tam)){
				printf("\n\tTamanho nao cadastrado !");
				return;
              	
				
}				
}
}

int verifica_nome(struct soft vet_cadastro[TAM], char *nome){
	
	int i;
	//	if (i_cad < 1){
			
//} 

	for ( i = 0; i < TAM; i++ )
    {
    	if (strcmp(vet_cadastro[i].nome, nome) == 0)
        	return 0;			  	          
	}
	
		return 1;		
} 

int alterar(struct soft vet_cadastro[TAM]){
	
	char nome[30];
	int i;
	
	if(i_cad > 100)return 0;
	
	
		printf("\nEntre com o nome do Software: \n");
        scanf("%s", nome);
        
    for(i=0; i < TAM; i++){
        
     	if (strcmp(vet_cadastro[i].nome, nome) == 0 ){		

			fflush(stdin);
			printf("\nNome do SOFTWARE: ");
			gets(vet_cadastro[i].nome);
			fflush(stdin);
			printf("Versao: ");
			scanf("%f", &vet_cadastro[i].versao);
			fflush(stdin);
			printf("Ano: ");
			scanf("%d", &vet_cadastro[i].ano);
			fflush(stdin);
			printf("Funcionalidade: ");
			gets(vet_cadastro[i].function);
			fflush(stdin);
			printf("Tamanho: ");
			gets(vet_cadastro[i].tam);
			fflush(stdin);
			
			break;		

	}
	
}

}


int Exportar_dados (struct soft vet_cadastro[TAM])
{
    int i;
    FILE *saida;
    char arquivo[30];
    printf("Nome do arquivo para exportacao: ");
    gets(arquivo);
    strcat(arquivo, ".txt");
    saida = fopen (arquivo, "w");
    if (saida == NULL)
        return (-1); 
        
    for (i = 0; i < TAM; i++)
    {
        		fprintf(saida, "\n Nome: %s\n",vet_cadastro[i].nome);
                fprintf(saida,"\n Versao: %.1f\n", vet_cadastro[i].versao);
                fprintf(saida,"\n Ano: %d\n", vet_cadastro[i].ano);
                fprintf(saida,"\n Funcionalidade : %s\n",vet_cadastro[i].function);
                fprintf(saida,"\n Tamanho : %s\n\n\n",vet_cadastro[i].tam);
               
                
    }
    fclose (saida);
    return (1); 
}

int Importar_dados (struct soft vet_cadastro[TAM])
{
	int *size;
	int i = 0;
    FILE *import;
   // *size = 0;
    char arquivo[30];
    printf("Nome do arquivo para importacao: ");
    gets(arquivo);
  	strcat(arquivo, ".txt");
    import = fopen (arquivo, "r");
    if (import == NULL)
        return (-1);
  //  V v=  malloc (sizeof (IDENT));
  //  if (V == NULL)
  //      return (NULL);
        
    while (!feof (import))
    {
      //  *size = *size + 1;
      //  V = realloc (V, (*tam) * sizeof (IDENT));
      //  if (vet_cadastro == NULL)
      //      return (NULL);
        
        		fscanf(import,"%s",vet_cadastro[i].nome);
                fscanf(import,"%.1f", &vet_cadastro[i].versao);
                fscanf(import,"%d", &vet_cadastro[i].ano);
                fscanf(import,"%s",vet_cadastro[i].function);
                fscanf(import,"%s",vet_cadastro[i].tam);
                
              i++;  
    }
    fclose (import);
    return (1);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por causa desse monte de \n, espaço e palavras que tem na hora de salvar o cadastro. Na hora de ler não pode simplesmente ignorar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu programa grava isso?!!
 

 Nome: lolcode

 Versao: 1.0

 Ano: 2017

 Funcionalidade : codifica em formato lol

 Tamanho : 100GB



 Nome: 

 Versao: 0.0

 Ano: 0

 Funcionalidade : 

 Tamanho : 



 Nome: 

 Versao: 0.0

 Ano: 0

 Funcionalidade : 

 Tamanho : 

.......

É um grande caso de ineficiência.
Não seria melhor você gravar cada software por linha?
Tipo:

lolcode 1.0 2017 100GB codifica em formato lol

Sabendo que os campos são nome, versão, ano, tamanho e funcionalidades, nessa ordem, você poderia ler com algo como:
 

#include<stdio.h>
#include <stdlib.h>
#define TAM 100

typedef struct Soft {
    char nome[TAM];
    float versao;
    int ano;
    char function[TAM];
    char tam[TAM];
}Soft;

int main(){
    FILE* file;
    
    if ( !(file = fopen("teste.txt", "r+"))){
        perror("Erro ");
        getchar();
        exit(1);    
    }else{
        printf("Arquivo aberto.\n");
    }
    
    Soft dados;
    //lolcode 1.0 2017 100GB codifica em formato lol
    fscanf(file, "%s %f %d %s %99[^\n]%*c", dados.nome, &dados.versao, &dados.ano, dados.tam, dados.function);
    
    printf ( "\n Nome: %s", dados.nome );
    printf ( "\n Versao: %.1f", dados.versao );
    printf ( "\n Ano: %d", dados.ano );
    printf ( "\n Tamanho: %s", dados.tam );
    printf ( "\n Funcionalidade: %s", dados.function );
    printf ( "\n\n" );
    
    fclose(file);
    printf("Bye!");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se preferir continuar com sua versão do programa aqui lhe deixo sue programa arrumado. Ou isso acho >_<.
 

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#define TAM 100

int i_cad;


typedef struct soft {
    char nome[TAM];
    float versao;
    int ano;
    char function[TAM];
    char tam[TAM];
}soft;



char * cadastrar ( struct soft vet_cadastro[TAM], char * nome );
void consult ( struct soft vet_cadastro[TAM] );
int alterar ( struct soft vet_cadastro[TAM] );
void consult_versao ( struct soft vet_cadastro[TAM] );
void consult_ano ( struct soft vet_cadastro[TAM] );
void consult_tam ( struct soft vet_cadastro[TAM] );
int verifica_nome ( struct soft vet_cadastro[TAM], char * nome );
void listar ( struct soft vet_cadastro[TAM] );
int Exportar_dados ( struct soft vet_cadastro[TAM] );
int Importar_dados ( struct soft vet_cadastro[] );

int main ( int argc, char *argv[] ) {

    struct soft vet_cadastro[TAM];
    int m;
    char nome[50];
    int num;
    int retorno;
    m = 0;
    //f = 0;
    /*
    int a = 1, b = 1;// cont, x;
    char Chave1[10], Chave2[10];
    printf ( "\n                       --------Bem-Vindo--------\n\n" );
    printf ( "\n\t\t  ** BIBLIOTECA DE SOFTWARE LIVRE **" );
    
    do {
        printf ( "\n\nChave1:  " );
        gets ( Chave1 );
        fflush ( stdin );
        printf ( "\nChave2:  " );
        gets ( Chave2 );
        fflush ( stdin );
        a = strcmp ( Chave1, "l" );
        b = strcmp ( Chave2, "d" );
        
        if ( a != 0 || b != 0 )
            printf ( "\n                       Chave Incorreta\n\n                   ----Tente Novamente----" );
            
            
    } while ( a != 0 || b != 0 );
    
    
    printf ( "\n                          ----Login Efetuado----\n\n" );
    getch();
    
    system ( "cls" );
    
    */
    do {
    
        printf ( "\n\nEscolha uma das opções abaixo: \n\n" );
        printf ( "1- Cadastrar SOFTWARE \n2- Consultar SOFTWARE \n3- Alterar cadastro \n4- Listar \n5- Exportar em ARQUIVO \n6- Importar ARQUIVO \n7- Sair <- \n" );
        printf ( "\nOpcao: " );
        scanf ( "%d", &m );
        fflush ( stdin );
        
        switch ( m ) {
            case 1:
                system ( "cls" );
                printf ( "\nNome do SOFTWARE: " );
                gets ( nome );
                retorno = 0;
                retorno = verifica_nome ( vet_cadastro, nome );
                
                if ( retorno == 1 ) {
                
                    cadastrar ( vet_cadastro, nome );
                    printf ( "\n\n\t   Cadastro realizado com sucesso !" );
                    getch();
                    system ( "cls" );
                    break;
                } else {
                    system ( "cls" );
                    printf ( "\n\tSoftware Ja cadastrado !" );
                    getch();
                    break;
                }
                
            case 2:
            
                do {
                    system ( "cls" );
                    printf ( "                         \n\n...:::Tipo de Consulta:::..." );
                    printf ( "\n\n\n1- Consulta por nome \n2- Consultar por Versao \n3- Consulta por Ano \n4- Consulta por Tamanho \n5- Voltar <- \n" );
                    printf ( "\nOpcao: " );
                    scanf ( "%d", &num );
                    
                    switch ( num ) {
                        case 1:
                            system ( "cls" );
                            consult ( vet_cadastro );
                            getch();
                            system ( "cls" );
                            break;
                            
                        case 2:
                            system ( "cls" );
                            consult_versao ( vet_cadastro );
                            getch();
                            system ( "cls" );
                            break;
                            
                        case 3:
                            system ( "cls" );
                            consult_ano ( vet_cadastro );
                            getch();
                            system ( "cls" );
                            break;
                            
                        case 4:
                            system ( "cls" );
                            consult_tam ( vet_cadastro );
                            getch();
                            system ( "cls" );
                            break;
                            
                        case 5:
                            printf ( "\n\t\t     ** Voltando para Menu principal **" );
                            printf ( "\n" );
                            getch();
                            system ( "cls" );
                            break;
                            
                        default:
                            system ( "cls" );
                            printf ( "\n\nOpcao Invalida\n\n" );
                            break;
                    }
                } while ( num != 5 );
                
                break;
                
            case 3:
                system ( "cls" );
                
                alterar ( vet_cadastro );
                system ( "cls" );
                break;
                
            case 4:
                system ( "cls" );
                listar ( vet_cadastro );
                getch();
                system ( "cls" );
                break;
                
            case 5:
                system ( "cls" );
                
                if ( Exportar_dados ( vet_cadastro ) == -1 )
                    printf ( "ERRO na criação do Arquivo !\n" );
                    
                break;
                
            case 6:
                system ( "cls" );
                
                if ( Importar_dados ( vet_cadastro ) == -1 )
                    printf ( "Erro na importacao do Arquivo!\n" );
                    
                break;
                
            case 7:
                system ( "cls" );
                printf ( "\n\n\t\t\t\t** ADEUS ! **\n\n" );
                getch();
                break;
                
            default:
                system ( "cls" );
                printf ( "\n\nOpcao Invalida\n\n" );
                break;
                
        }
    } while ( m != 7 );
    
    
    return 0;
}

void listar ( soft vet_cadastro[] ) {
    int i;

    for ( i = 0; i < i_cad; i++ ) {
        printf("\n Nome: %s"            , vet_cadastro[i].nome);
        printf("\n Versao: %.1f"        , vet_cadastro[i].versao);
        printf("\n Ano: %d"             , vet_cadastro[i].ano);
        printf("\n Funcionalidade: %s"  , vet_cadastro[i].function);
        printf("\n Tamanho: %s"         , vet_cadastro[i].tam);
        printf("\n\n");
    }
}

char * cadastrar ( struct soft vet_cadastro[TAM], char * nome ) {


    if ( i_cad == 100 ) return 0;
    
    //char call;
    
    
    
    
    
    strcpy ( vet_cadastro[i_cad].nome, nome );
    
    fflush ( stdin );
    printf ( "Versao: " );
    scanf ( "%f", &vet_cadastro[i_cad].versao );
    fflush ( stdin );
    printf ( "Ano: " );
    scanf ( "%d", &vet_cadastro[i_cad].ano );
    fflush ( stdin );
    printf ( "Funcionalidade: " );
    gets ( vet_cadastro[i_cad].function );
    fflush ( stdin );
    printf ( "Tamanho: " );
    gets ( vet_cadastro[i_cad].tam );
    fflush ( stdin );
    
    
    
    i_cad++;
    
    
    return "tem que retornar algo";
    
}

void consult ( struct soft vet_cadastro[TAM] ) {

    char nome[30];
    int i = 0;
    
    printf ( "\nDigite o nome: " );
    scanf ( "%s", nome );
    
    for ( i = 0; i < TAM; i++ ) {
        if ( strcmp ( vet_cadastro[i].nome, nome ) == 0 ) {
        
            printf ( "\n Nome: %s", vet_cadastro[i].nome );
            printf ( "\n Versao: %.1f", vet_cadastro[i].versao );
            printf ( "\n Ano: %d", vet_cadastro[i].ano );
            printf ( "\n Funcionalidade: %s", vet_cadastro[i].function );
            printf ( "\n Tamanho: %s", vet_cadastro[i].tam );
            printf ( "\n\n" );
            return;
            
        } else if ( i == 99 && strcmp ( vet_cadastro[99].nome, nome ) ) {
            printf ( "\n\tNome nao cadastrado !" );
            return;
            
        }
    }
}

void consult_versao ( struct soft vet_cadastro[TAM] ) {

    float versao;
    int i = 0;
    
    printf ( "\nInforme a Versao: " );
    scanf ( "%f", &versao );
    
    for ( i = 0; i < TAM; i++ ) {
        if ( vet_cadastro[i].versao == versao ) {
        
            printf ( "\n Nome: %s", vet_cadastro[i].nome );
            printf ( "\n Versao: %.1f", vet_cadastro[i].versao );
            printf ( "\n Ano: %d", vet_cadastro[i].ano );
            printf ( "\n Funcionalidade: %s", vet_cadastro[i].function );
            printf ( "\n Tamanho: %s", vet_cadastro[i].tam );
            printf ( "\n\n" );
            return;
            
        } else if ( i == 99 && vet_cadastro[99].versao == versao ) {
            printf ( "\n\tVersao nao cadastrada !" );
            return;
            
        }
    }
}

void consult_ano ( struct soft vet_cadastro[TAM] ) {

    int ano;
    int i = 0;
    
    printf ( "\nInforme o Ano: " );
    scanf ( "%d", &ano );
    
    for ( i = 0; i < TAM; i++ ) {
        if ( vet_cadastro[i].ano == ano ) {
        
            printf ( "\n Nome: %s", vet_cadastro[i].nome );
            printf ( "\n Versao: %.1f", vet_cadastro[i].versao );
            printf ( "\n Ano: %d", vet_cadastro[i].ano );
            printf ( "\n Funcionalidade: %s", vet_cadastro[i].function );
            printf ( "\n Tamanho: %s", vet_cadastro[i].tam );
            printf ( "\n\n" );
            return;
            
        } else if ( i == 99 && vet_cadastro[99].ano == ano ) {
            printf ( "\n\tAno nao cadastrado !" );
            return;
            
        }
    }
}

void consult_tam ( struct soft vet_cadastro[TAM] ) {

    char tam[TAM];
    int i = 0;
    
    printf ( "\nInforme o Tamanho: " );
    scanf ( "%s", tam );
    
    for ( i = 0; i < TAM; i++ ) {
        if ( strcmp ( vet_cadastro[i].tam, tam ) == 0 ) {
        
            printf ( "\n Nome: %s", vet_cadastro[i].nome );
            printf ( "\n Versao: %.1f", vet_cadastro[i].versao );
            printf ( "\n Ano: %d", vet_cadastro[i].ano );
            printf ( "\n Funcionalidade: %s", vet_cadastro[i].function );
            printf ( "\n Tamanho: %s", vet_cadastro[i].tam );
            printf ( "\n\n" );
            return;
            
        } else if ( i == 99 && strcmp ( vet_cadastro[99].tam, tam ) ) {
            printf ( "\n\tTamanho nao cadastrado !" );
            return;
            
            
        }
    }
}

int verifica_nome ( struct soft vet_cadastro[TAM], char *nome ) {

    int i;
    //  if (i_cad < 1){
    

    
    for ( i = 0; i < TAM; i++ ) {
        if ( strcmp ( vet_cadastro[i].nome, nome ) == 0 )
            return 0;
    }
    
    return 1;
}

int alterar ( struct soft vet_cadastro[TAM] ) {

    char nome[30];
    int i;
    
    if ( i_cad > 100 ) return 0;
    
    
    printf ( "\nEntre com o nome do Software: \n" );
    scanf ( "%s", nome );
    
    for ( i = 0; i < TAM; i++ ) {
    
        if ( strcmp ( vet_cadastro[i].nome, nome ) == 0 ) {
        
            fflush ( stdin );
            printf ( "\nNome do SOFTWARE: " );
            gets ( vet_cadastro[i].nome );
            fflush ( stdin );
            printf ( "Versao: " );
            scanf ( "%f", &vet_cadastro[i].versao );
            fflush ( stdin );
            printf ( "Ano: " );
            scanf ( "%d", &vet_cadastro[i].ano );
            fflush ( stdin );
            printf ( "Funcionalidade: " );
            gets ( vet_cadastro[i].function );
            fflush ( stdin );
            printf ( "Tamanho: " );
            gets ( vet_cadastro[i].tam );
            fflush ( stdin );
            
            break;
            
        }
        
    }
    return 0;
}


int Exportar_dados ( soft vet_cadastro[] ) {
    FILE* file;
    
    if ( !(file = fopen("teste.txt", "w"))){
        perror("Erro ");
        getchar();
        return ( -1 );  
    }
    int i;
    for ( i = 0; i < i_cad; i++ ) {
        //fscanf ( file , format , vet_cadastro[i_cad].nome, vet_cadastro[i_cad].versao, vet_cadastro[i_cad].ano, vet_cadastro[i_cad].function, vet_cadastro[i_cad].tam);
        
        fprintf(file, "\n Nome: %s\n"           , vet_cadastro[i].nome);
        fprintf(file,"\n Versao: %.1f\n"        , vet_cadastro[i].versao);
        fprintf(file,"\n Ano: %d\n"             , vet_cadastro[i].ano);
        fprintf(file,"\n Funcionalidade : %s\n" , vet_cadastro[i].function);
        fprintf(file,"\n Tamanho : %s\n\n\n"    , vet_cadastro[i].tam);
        
        
    }    

    fclose ( file );
    return ( 1 );
}

int Importar_dados( soft* vet_cadastro ) {
    FILE* file;
    if ( !(file = fopen("teste.txt", "r"))){
        perror("Erro ");
        getchar();
        return ( -1 );  
    }
    
    i_cad = 0;
    
    fscanf(file, "\n Nome: %[^\n]\n"            ,  vet_cadastro[i_cad].nome);
    fscanf(file,"\n Versao: %f\n"               , &vet_cadastro[i_cad].versao);
    fscanf(file,"\n Ano: %d\n"                  , &vet_cadastro[i_cad].ano);
    fscanf(file,"\n Funcionalidade : %[^\n]\n"  ,  vet_cadastro[i_cad].function);
    fscanf(file,"\n Tamanho : %s\n\n\n"         ,  vet_cadastro[i_cad].tam);
    if (feof(file)==0) i_cad++;
    while ( feof(file) == 0 ){
        fscanf(file, "\n Nome: %[^\n]\n"            ,  vet_cadastro[i_cad].nome);
        fscanf(file,"\n Versao: %f\n"               , &vet_cadastro[i_cad].versao);
        fscanf(file,"\n Ano: %d\n"                  , &vet_cadastro[i_cad].ano);
        fscanf(file,"\n Funcionalidade : %[^\n]\n"  ,  vet_cadastro[i_cad].function);
        fscanf(file,"\n Tamanho : %s\n\n\n"         ,  vet_cadastro[i_cad].tam);
        i_cad++;
        if(i_cad == TAM) break;
    }
    
    fclose ( file );
    return ( 1 );
}

Desativei o tal das chaves, é só retirar o comentário do código e volta a funcionar. Era muito chato ficar pondo l e d todo o tempo :P

Cara um conselho... se você fizer seu programa assim você vai sofrer e sofrer sheuhseusehshuesuh:rezando:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

poo , rodou nesse programa meu, porém coloquei nesse outro aqui e tá dando q nao encontro o arquivo...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define TAM 100

struct Compra
{
    float valor;
    
};

struct agenda {
    int cod;
    char nome[TAM];
    char curso[TAM];
    char instituicao[TAM];
    char local[TAM];
    char sala[TAM];
    char hora[TAM];
    char horario[TAM];
    struct Compra compra;
    
   
} registros[100];

void cadastrar(int cod, int pos);
void consultar();
int verifica_pos();
void zerar();
int verifica_cod(int cod);
void excluir();
int arquivo ();
int import_arq();


int main(void){
    int op = 0;
    int retorno;
    int codaux;
    int posicao;
    int back;
    int documento;
    char Chave1[TAM];
    char Chave2[TAM];
    int x, a=1, b=1;
    char cadsistema[TAM];
    char cadsistemapass[TAM];
    int logon = 0;

do{    
    printf("\n\n\t\tCadastre um Login e Senha unico para o SISTEMA\n\n");
    printf("\nMENU\n\n1 - >> Cadastrar << \n2 - Logar \n3 - Sair");
    printf("\n\n\nOpcao: ");
    
    scanf("%d", &logon);
    system("cls");
    
    switch (logon){
    	
    	case 1:
    		fflush(stdin);
    		printf("\n Cadastre um Login:  ");
    		gets(cadsistema);
    		fflush(stdin);
    		
    		printf("\n Cadastre uma Senha:  ");
    		gets(cadsistemapass);
    		fflush(stdin);
    		
    		system("cls");
    		break;
    	case 3:
    		printf("\n\n\t\t     Obrigado por utilizar de nossos Servicos\n\n");
        	printf("\n\n\t\t                Volte Sempre !\n\n");
        	getch();
    		return(0);
    		break;
    	case 2:
    		printf("\t -- Indo para Menu de Login --");
    		break;
    		
     	default:
     		printf("Opcao Invalida");
     		break;
	}
}while( logon != 2 );
    
    
   do{
   			fflush(stdin);
			printf("\n\n Login:  ");
			gets(Chave1);
			fflush(stdin);
			printf("\n Senha:  ");
			gets(Chave2);
			fflush(stdin);
			a = strcmp(Chave1, cadsistema);
			b = strcmp(Chave2, cadsistemapass);
			
			if(a!=0 || b!=0){
				printf("\n\n\tLogin ou senha Errados !\n");
       			printf("\n\tTente novamente\n");
		}
		}while(a!=0 || b!=0);
					system("cls");
					printf("\n       ** Login efetuado com sucesso **");
					getch();
					system("cls");
        			
				
       				

    zerar();

    
    do{
        printf("\n\n\t------- CADASTRO DE PESSOAS EM CURSOS DE SOFTWARE LIVRE -------\n\n");
        printf("\n\n\t\t\t\t** Bem Vindo ! **\n\n");
        printf("\n\n   ** PARA CADASTRAR O ALUNO NO CURSO, PRIMEIRO CADASTRE O RESPECTIVO RG **\n\n");
        printf("\nMENU\n\n1 - Cadastrar RG Aluno\n2 - Cadastrar Aluno\n3 - Consultar RG\n4 - Limpar RG\n5 - Exportar Dados\n6 - Importar Dados\n7 - Sair\n\nOpcao: ");

        scanf("%d",&op);

        system("cls");

        switch (op)
        {
            case 1:
            {
              // posicao = verifica_pos();

              // if ( posicao != -1 )
               // {
                    printf("\nCadastre o RG do aluno:\n");
                    scanf("%d",&codaux);fflush(stdin);
                    
                    system("cls");
                    break;
            //	}
				}
			case 2:
			{				
				posicao = verifica_pos();

                if ( posicao != -1 ) // por ser qualquer valor se compara a diferente de -1 e nao = a 0.
                {
				
                    printf("\nCadastre o Aluno:\n");

                    retorno = verifica_cod(codaux);

                    if ( retorno == 1 )
                        cadastrar(codaux,posicao);
                    else
                        printf("\nRG ja existente\n");
                }
            
                else
                    printf("\nA agenda de RG esta cheia\n");
                    
				system("cls");
                break;
                
            }
            case 3:
            {            	
                consultar();
                getch();
                system("cls");
                break;
            }
            case 4:
            {
                excluir();
                system("cls");
                break;
            }
           case 5:
            {
                documento = arquivo();
            	if(documento == -1)
            		printf("Erro na exportação de dados !");            		
            	getch();
            	system("cls");
            	break;
            } 
            case 6:
            {
            	
            	if (import_arq() == 1)
            		printf("Erro de leitura do arquivo !");
            	getch();
			//	system("cls");
				break;	
			}
            	
             case 7:
            {
                printf("\n\n\t\t     Obrigado por utilizar de nossos Servicos\n\n");
        		printf("\n\n\t\t                Volte Sempre !\n\n");
                break;
            } 
            default :
            { 
                printf("Opcao Invalida");
                break;
            }
        }
    }while ( op != 7 );
    
 
        	
	getch();

    return 0;
}

void cadastrar(int cod, int pos)
{
    pos = verifica_pos();

    registros[pos].cod = cod;
	fflush(stdin);
    printf("\n Nome:\n");
    gets(registros[pos].nome);
    fflush(stdin);  

    printf("\n Cursos:\n");
    gets(registros[pos].curso);
    fflush(stdin);

    printf("\n Instituicao:\n");
    gets(registros[pos].instituicao); 
    fflush(stdin);
    
    printf("\n Local:\n");
    gets(registros[pos].local);
    fflush(stdin);
    
    printf("\n Sala[s]:\n");
    gets(registros[pos].sala); 
    fflush(stdin);
    
    printf("\n Horario de Inicio:\n");
    scanf("%s", registros[pos].hora);
    
    
    printf("\n Horario de Termino:\n");
    scanf("%s", registros[pos].horario);
    

    printf("\n Valor: \n");
    scanf("%f", &registros[pos].compra.valor);

   

    printf("\nCadastro Realizado com Sucesso!\n\n");
}

void consultar()
{
    int cont = 0;
    int cod;

    printf("\nEntre com o RG\n");
    scanf("%d",&cod);

    for ( cont = 0; cont < 100; cont++ )
    {
        if ( registros[cont].cod == cod )
        {
            if ( registros[cont].compra.valor != 0 ) 
            {
                printf("\n Nome: %s", registros[cont].nome);
                printf("\n Curso: %s", registros[cont].curso);
                printf("\n Instituicao: %s", registros[cont].instituicao);
                printf("\n Local: %s", registros[cont].local);
                printf("\n Sala: %s", registros[cont].sala);
                printf("\n Horario de Inicio: %s", registros[cont].hora);
                printf("\n Horario de Termino: %s", registros[cont].horario);
                printf("\n Valor: %.2f", registros[cont].compra.valor);
            
            }else {
            	
            	printf("\n Nome: %s", registros[cont].nome);
                printf("\n Curso: %s", registros[cont].curso);
                printf("\n Instituicao: %s", registros[cont].instituicao);
                printf("\n Local: %s", registros[cont].local);
                printf("\n Sala: %s", registros[cont].sala);
                printf("\n Horario de Inicio: %s", registros[cont].hora);
                printf("\n Horario de Termino: %s", registros[cont].horario);
                printf("\n Valor: %.2f", registros[cont].compra.valor);
			} 
            return; 
        }
    }

    printf("\nRG nao encontrado\n"); 

}

int verifica_pos()
{
    int cont = 0;

    for ( cont = 0; cont < 100; cont++ )
        if ( registros[cont].compra.valor == 0 ) // se for verdadeiro qualquer valor será 0 e vai retornar sua posição
            return cont;

    return -1; // se for falso ele vai retornar -1
}

void zerar()
{
    int cont = 0;

}

int verifica_cod(int cod)
{
    int cont = 0;

    for ( cont = 0; cont < 100; cont++ )
    {
        if ( registros[cont].cod == cod )
            return 0;
    }

    return 1;
}

void excluir()
{
    int cod = 0;
    int cont = 0;

    printf("\nEntre com o RG que deseja Limpar\n");
    scanf("%d",&cod);

    for ( cont = 0; cont < 100; cont++ )
    {
        if ( registros[cont].cod == cod )
        {
            if ( registros[cont].compra.valor != 0 )  
            {
                registros[cont].cod = 0;
                strcpy(registros[cont].nome, "");
                strcpy(registros[cont].curso, "");
                strcpy(registros[cont].instituicao, "");
                strcpy(registros[cont].local, "");
                strcpy(registros[cont].sala, "");
                strcpy(registros[cont].hora, "");
                strcpy(registros[cont].horario, "");
                registros[cont].compra.valor = 0;
                         
			
                printf("\n  RG Limpo com sucesso!\n");
                printf("\n\n\n\t     Para alterar o cadastro, \n\n\tinforme no menu CADASTRE O ALUNO as informações corretas.");
                getch();
                
            }else if ( registros[cont].compra.valor == 0 ){
            	
            	registros[cont].cod = 0;
                strcpy(registros[cont].nome, "");
                strcpy(registros[cont].curso, "");
                strcpy(registros[cont].instituicao, "");
                strcpy(registros[cont].local, "");
                strcpy(registros[cont].sala, "");
                strcpy(registros[cont].hora, "");
                strcpy(registros[cont].horario, "");
                registros[cont].compra.valor = 0;
                
          
				
                printf("\n  RG Limpo com sucesso!\n");
                printf("\n\n\n\t     Para alterar o cadastro, \n\n\tinforme no menu CADASTRE O ALUNO as informações corretas.");
                getch();
                
                
			}
            	

            return; 
        }
    }

    printf("\nRG nao encontrado\n"); 
    getch();
}

int arquivo ()
{
    int cont;
    FILE *doc;
    char nome[30];
    
    fflush(stdin);
    printf("Nome do Documento: ");
    gets(nome);
    strcat(nome, ".txt");
    doc = fopen (nome, "w");
    if (doc == NULL)
        return (-1); 
        
    for (cont = 0; cont < TAM; cont++)
    {
        		fprintf(doc,"%s\n",registros[cont].nome);
                fprintf(doc,"%s\n", registros[cont].curso);
                fprintf(doc,"%s\n", registros[cont].instituicao);
                fprintf(doc,"%s\n",registros[cont].local);
                fprintf(doc,"%s\n",registros[cont].sala);
                fprintf(doc,"%s\n",registros[cont].hora);
                fprintf(doc,"%s\n",registros[cont].horario);
                fprintf(doc,"%.2f\n",registros[cont].compra.valor);
                             
                
    }
    fclose (doc);
    return (1); 
}

int import_arq(){
	
	int cont;
    FILE* documento;
    char nome[30];
    
    printf("Nome do Documento: ");
    gets(nome);
    strcat(nome, ".txt");
    
    if ( !(documento = fopen(nome, "r+"))){
    	perror("Erro ");
        getchar();
        return(1);    
    }else{
        printf("Arquivo aberto.\n");
    }
    
    
   for (cont=0; cont<2; cont++){ 
        fscanf(documento, "%s %s %s %s %s %s %s %s %99[^\n]%*c", registros[cont].nome , registros[cont].curso, registros[cont].instituicao, registros[cont].local, registros[cont].sala, registros[cont].hora, registros[cont].horario);
        // %99[^\n]%*c
       // registros[cont].nome , registros[cont].curso, registros[cont].instituicao, registros[cont].local, registros[cont].sala, registros[cont].hora, registros[cont].horario, registros[cont].compra.valor
   				
    printf ( "\n Nome: %s", registros[cont].nome );
    printf ( "\n Versao: %.1f", registros[cont].curso );
    printf ( "\n Ano: %d", registros[cont].instituicao );
    printf ( "\n Funcionalidade: %s", registros[cont].local );
    printf ( "\n Tamanho: %s", registros[cont].sala );
    printf ( "\n Tamanho: %s", registros[cont].hora );
    printf ( "\n Tamanho: %s", registros[cont].horario );
    //printf ( "\n Tamanho: %.2f", registros[cont].compra.valor );
    printf ( "\n\n" );
    
}
    
    fclose(documento);
    printf("\t\t** Voltando para Menu Principal **");
    getch();
    return 0;

}

Eu sei, é uma atividade... só tenho esse problema agora, ele n encontra o arquivo criado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×