Jump to content
Sign in to follow this  
micront

ajuda abertura de varios ficheiros

Recommended Posts

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");

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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]);
                        }
                    }
                }
            }
        }
                    }

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
Localhost

Não precisas desses if's, com o indice tu já estás a "verificar" qual é o autor e o ficheiro.


here since 2009

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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]);
                    }

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.