Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

micront

ajuda abertura de varios ficheiros

Mensagens Recomendadas

micront

        fiz este bocado de codigo para abrir varios ficheiros maximo 20,mas so me abre o ultimo o ficheiro 20, alguem me ajude por favor :wallbash:

    FILE *ficheiros[20];
    char frase [50];
    int j,k;

    for (j=0;j<=20;j++)
        sprintf(frase," nome do ficheiro %d.txt",j);

    for (k=1;k<=20;k++)
        ficheiros [ i ]= fopen (frase,"w");

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Na verdade, estás a abrir 20 vezes o mesmo ficheiro.

Tens 2 ciclos for, que são executados independentemente. 1º é executado o do sprintf, que escreve no array a frase, variando de 0 a 20 (e portanto, são 21 vezes), escrevendo sempre por cima.

quando terminas o 1º ciclo, tens no array o texto " nome do ficheiro 20.txt" (e aqui, cuidado com o espaço no início). Depois começa a executar 20 vezes o fopen, sempre com o mesmo texto no array frase.

O que queres fazer é ter só um for, e colocar o sprintf e o fopen dentro desse for, com { chavetas }.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
micront

fiz este codigo para abrir varios ficheiros e escrever para dentro de cada um deles ,mas eles abrem todos bem mas nao consigo escrever para dentro deles agradecia ajuda.


           FILE *ficheiros[20];
           char frase [20];

            for (i=0;i<=20;i++){

               sprintf(frase,"Numeros de autor %d.txt",i);
               ficheiros[i] = fopen(frase,"w");

                }


        for (i = 0; i < N_ELEM_AUT; i++){


        if (N_AUT[i]==1 && ficheiros[i]==1){

            fprintf(ficheiros[i],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
        }else{

            if (N_AUT[i]==2 && ficheiros[j]==2){

                fprintf(ficheiros[i],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
            }else{

                if (N_AUT[i]==3 && ficheiros[i]==3){

                    fprintf(ficheiros[i],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
                }else{

                    if (N_AUT[i]==4 && ficheiros[i]==4){

                        fprintf(ficheiros[j],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
                    }else{

                        if (N_AUT[i]==5 && ficheiros[i]==5){

                            fprintf(ficheiros[i],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
                        }
                    }
                }
            }
        }
                    }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Se queres ser ajudado tens de nos ajudar a perceber o teu problema. Por favor, começa a usar as tags code, fazes o seguinte para usar:

[ code=C ] codigo aqui [ /code ], sem os espaços.

Tirando isso o teu problema parece-me no segundo laço em que tu escreves em ficheiros[j] e a variável de controlo é a i


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
micront

vou ver se concigo explicar:

tenho um array de autores AUT[ i ] em que cada autor tem um numero que esta guardado noutro array N_AUT[ i ],eu quero abrir varios ficheiros e guardar dentro de cada um  deles o respectivo autor e respectivo numero,por exemplo: JOAQUIM -1fica gravado no ficheiro1, MANUEL-2 fica gravado no ficheiro2

TIAGO-3 fica gravado no ficheiro3.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Tu tens um for com uma variável de controlo j, depois tens um segundo for com a variável de controlo i, no entanto no segundo for estás a referir-te ao ficheiros com o indice j, ou seja estás sempre a referir-te ao último número que ficou na variável j do primeiro for, por isso tens de mudar tudo o que está dentro do segundo for com o indice j para o indice i


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Fazes isto:

for (i = 0; i < N_ELEM_AUT; i++){
    fprintf(ficheiros[i],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
}

So uma vez


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
micront

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

char AL[10] [50];
char AUT [1000] [50];
char AUT_SN [1000] [50];
int N_AUT [1000];
int N_ELEM_AUT = 0, N_ELEM_AUTSN = 0;

int procura_nome_AUT(char nome[]) {
    int i;
    /*percorre todos os nomes de AUT*/
    for (i = 0; i < N_ELEM_AUT; i++) {
        if (strcmp(AUT[i], nome) == 0) 
            return N_AUT[i]; 
    }
    return -1; 
}

void adicionar_AUT(char nome[], int numero) {
    if (N_ELEM_AUT < 1000) {

        strcpy(AUT[N_ELEM_AUT], nome);
        N_AUT[N_ELEM_AUT] = numero;
        N_ELEM_AUT++;
    }
}

void rebuscar_nome_AUT_SN(int numPErdos, int c_aut_sn) {
    int i;
    for (i = N_ELEM_AUTSN - 1; i > N_ELEM_AUTSN - c_aut_sn - 1; i--)

        adicionar_AUT(AUT_SN[i], numPErdos);
        N_ELEM_AUTSN = N_ELEM_AUTSN - c_aut_sn;
}

void adicionar_AUTSN(char nome[]) {
    if (N_ELEM_AUTSN < 1000) {
        strcpy(AUT_SN[N_ELEM_AUTSN], nome);
        N_ELEM_AUTSN++;
    }
}




int main(int argc, char** argv) {
    
    char fich_leitura[250]; 
    char c[50];    
    int nAutores, nCharAutor, i;

    /* Abrir o ficheiro para leitura*/
    FILE *Ficheiro_de_autores;

   /*MENU*/
    int numero;

    printf(" _______________________________________________________________\n");
    printf("|                                  |||||||||||||||||||||||||||||||||||      |\n");
    printf("|_______________________________________________________________|\n");
    printf("|Escolha o que pretende fazer inserindo o numero correspondente:|\n");
    printf("|                                                               |\n");
    printf("| [1].[Executar programa]                                       |\n");
    printf("| [2].[informacoes relacionadas com o programa]                 |\n");
    printf("| [3].[Fechar programa]                                         |\n");
    printf("|_______________________________________________________________|\n");
    printf  ("                                                                                                                                                  |\n");
    printf("|_______________________________________________________________|\n\n");
    printf("INSIRA O NUMERO DA SUA OPCAO:  ");
    scanf("%d",&numero);



    switch(numero)
       {
        case 1:
               printf("\n\n\t\tEscolheu -EXECUTAR PROGRAMA\n\n");
               printf("Indique o nome do ficheiro de leitura: ");
               scanf("%s", fich_leitura);
               Ficheiro_de_autores = fopen(fich_leitura, "r");
               if (Ficheiro_de_autores == NULL)
               {
                   printf ("                !!!!!!!!ERRO!!!!!!!!\n");
                   printf ("----VERIFIQUE SE O NOME DO FICHEIRO ESTA BEM ESCRITO----\n\n");
                   printf ("                  TENTE NOVAMENTE\n\n\n\n");
               }
               break;
        case 2:
               printf("\n\n\t\tEscolheu -INFORMACOES RELACIONADAS \n\n");
               printf("Este programa pertence ao projecto tematico de informatica e\n");
               printf("programacao , foi elaborado pelo grupo 18, e tem como ,\n");
               printf("principal objectivo calcular o numero de erdos de qualquer\n");
               printf("autor relacionado com erdos.\n");
               break;
        case 3:
               printf("\n\n\t\tEscolheu FECHAR PROGRAMA\n\n");
               default:
               printf("O numero seleccionado não corresponde a nenhuma opção\n\n\n");
               fclose(Ficheiro_de_autores);
        }


        /*FIM DO MENU*/


   
    nAutores = 0;
    nCharAutor = 0;
    c[nCharAutor] = fgetc(Ficheiro_de_autores);

    while (c[nCharAutor] != EOF) {

     
        if (c[nCharAutor] == ',') {
            c[nCharAutor] = '\0';

            fgetc(Ficheiro_de_autores);

            strcpy(AL[nAutores], c);
            nCharAutor = 0;
            nAutores++;
        } else {

     
            if (c[nCharAutor] == '\n' || c[nCharAutor]=='\r') {
          
                c[nCharAutor-1] = '\0';
                strcpy(AL[nAutores], c);
                if (c[nCharAutor]=='\r')
                    fgetc (Ficheiro_de_autores);
                    nCharAutor = 0;
                    nAutores++;

                int C_AUT_SN = 0, A_N_B = -1;

                for (i = 0; i < nAutores; i++) {
                    if (strcmp(AL[i], "P. Erdos") == 0) {
                        if (procura_nome_AUT("P. Erdos") == -1)

                            adicionar_AUT("P. Erdos", 1);
                            A_N_B = 0;

                      } else {

                        if (A_N_B != -1) {
                            adicionar_AUT(AL[i], A_N_B + 1);

                            rebuscar_nome_AUT_SN(A_N_B + 1, C_AUT_SN);
                        } else {

                            A_N_B = procura_nome_AUT(AL[i]);

                            if (A_N_B == -1) {
                                adicionar_AUTSN(AL[i]);
                                C_AUT_SN++;
                            } else {
                                rebuscar_nome_AUT_SN(A_N_B + 1, C_AUT_SN);
                                C_AUT_SN = 0;
                            }
                        }
                    }
                }

           
                nAutores = 0;



            } else
                nCharAutor++;
        }

            c[nCharAutor] = fgetc(Ficheiro_de_autores);

    }
    fclose(Ficheiro_de_autores);

              FILE *ficheiros[20];
              char frase [50];


            for (i=0;i<=20;i++){

               sprintf(frase,"Numeros de Erdos %d.txt",i);
               ficheiros[i] = fopen(frase,"w");
            }

                    for (i = 0; i < N_ELEM_AUT; i++){

                    fprintf(ficheiros[i],"\n\t\t    %s: %d\n",AUT[i],N_AUT[i]);
                    }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Se calhar vi mal mas onde está a string frase, quando vais a abrir os ficheiros?

Edit: Mete uma verificação para ver se ele abre os ficheiros em condições assim:

if(!(ficheiros[i] = fopen(frase,"w"))){
   printf("Erro a abrir ficheiro\n");
   exit(1);
}


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.