Ir para o conteúdo
CSalgado

Ficheiros

Mensagens Recomendadas

CSalgado

Estou com uma dúvida muito basica.

O que eu quero é abrir um determinado ficheiro e imprimir os dados  desse ficheiro no ecrã.

Exemplo: 20  Maria

Já consegui fazer um pograma que lê um ficheiro só com numeros ou só com nomes.

int main(void)
{   
    FILE *fich;
    int i, n;
    int vec[1000];
    
    if ((fich = fopen("nomes.txt","r"))==NULL) { 
              printf("Erro a ler o ficheiro\n");
    }
    else { 
        i = 0; 
        while(!feof(fich))
            fscanf(fich, "%c",&vec[i++]);
        n = i-1;
        fclose(fich);
    }
    for (i=0; i<n; i++) printf("%c", vec[i]);
    printf("\n\n");
    
    
    
    system("PAUSE"); 
    return 0;
}

Mas quando tento fazer um programa para ler ao mesmo tempo uma lista de numeros associados a nomes dá-me sempre erro.

O que eu fiz até agora foi isto:

int main(void)
{   
    FILE *fich;
    char nome[200];
    int vec[100];
    int i, n,x,k;
    
    if ((fich = fopen("scores.txt","r"))==NULL) { 
              printf("Erro\n");
    }
    else {  
     i=0;
     x=0;
      while (!feof(fich)) {
        fscanf(fich, "%d",&vec[i++]);
    n=i-1;
    }
{   fscanf(fich, "%c",nome[x++]);
    k=x-1;
}
      fclose(fich);
   for(x=0;x<k;x++)
    printf("Nome:%c", nome[x]);
       {
    for(i=0;i<n;i++)
      printf("Score: %d\n", vec[i]);
       }
    }
    
    system("PAUSE"); 
    return 0;
}

Se alguém me poder dar uma ajuda agradeço.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CSalgado

É isto o código indentado?

int main(void)
{   
    FILE *fich;
    int nome[200];
    int vec[1000];
    int i, n,x,k;
    
    if ((fich = fopen("scores.txt","r"))==NULL) { 
              printf("Erro\n");
    }
    else {  
     i=0;
     x=0;
      while (!feof(fich)) {
        fscanf(fich, "%d",&vec[i++]);
           n=i-1;         }    
       {   
        fscanf(fich, "%c",nome[x++]);
        k=x-1;
       }
    fclose(fich);
    
    for(x=0;x<k;x++)
    printf("Nome:%c", nome[x]);
                      
                      for(i=0;i<n;i++)
                      printf("Score:%d\n", vec[i]);                    
    }   
    system("PAUSE"); 
    return 0;
}

Mas o erro está nos "for" ou já vem de traz quando faço o fscanf dos números e das letras?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

continuas a achar que isso esta bem identado ?

não te vou dizer outra coisa senão isto: o erro vesse claramente quando identares o código


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
CSalgado

Eu não acho que isto esteja bem identado apenas não sei fazer melhor. Ainda estou a aprender a programar.

E identar para mim é organizar o código para uma leitura mais fácil.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

prontos, idento eu por ti (afinal os IDE's fazem isso em menos de 1 segundo):

int main(void) {
    FILE *fich;
    int nome[200];
    int vec[1000];
    int i, n, x, k;

    if ((fich = fopen("scores.txt", "r")) == NULL) {
        printf("Erro\n");
    } else {
        i = 0;
        x = 0;
        while (!feof(fich)) {
            fscanf(fich, "%d", &vec[i++]);
            n = i - 1;
        }
        {
            fscanf(fich, "%c", nome[x++]);
            k = x - 1;
        }
        fclose(fich);

        for (x = 0; x < k; x++)
            printf("Nome:%c", nome[x]);

        for (i = 0; i < n; i++)
            printf("Score:%d\n", vec[i]);
    }
    system("PAUSE");
    return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lesiano16

Se tu queres ler uma string do ficheiro fscanf(fich, "%c", nome[x++]); não te vai ajudar. Tens que criar uma estrutura diferente de int nome[200] para guardares string's e é %s e não %c.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

bem ... como isto está complicado, e hoje estou um pouco de "dobrar as regras do forum"

int main(void) {
    FILE *fich;
    /* para que ter vectores de tamanhos diferentes ???? */
    char nome[200][64]; // lista de "strings" >> matrix
    int vec[200];
    int i, n, x, k; // ela .. tantas variaveis !!! acho que so vou usar duas

    if ((fich = fopen("scores.txt", "r")) == NULL) {
        printf("Erro\n");
    } else {
        i = 0;
        x = 0; // nao gosto desta
        while (!feof(fich)) {
            // vamos comentar este código todo ....
            // fscanf(fich, "%d", &vec[i++]);
            // n = i - 1;   nem quer saber porque isto ..
        // } estas chavetas aqui estagam o teu ciclo TODO !!!!
        // { idem aspas aspas
            // fscanf(fich, "%c", nome[x++]);
            // k = x - 1;
            // um simples fscanf porque o teu ficheiro esta bem formatadinho
            fscanf(fich, "%d %s\n", &(vec[i]), &(nome[i]));
            // incremento so depois de uma accao correcta
            i++;
        }
        fclose(fich);

        // guardar o numero de registo lidos
        n = i;

        // dois ciclos for para apresentar informação associada ... 
        //for (x = 0; x < k; x++)
        //    printf("Nome:%c", nome[x]);

        //for (i = 0; i < n; i++)
        //    printf("Score:%d\n", vec[i]);
        for (i = 0; i < n; i++)
            printf("Score:%d - Nome:%s\n", vec[i], nome[i]);
    }
    system("PAUSE");
    return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

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.