• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

MarcelValente

ler e escrever ficheiros

3 mensagens neste tópico

Boa tarde tudo bem?

tenho uma duvida...eu estou a desenvolver um programa para um projecto no ensino superior..e pra muitos de voces isto deve ser basico mas pra mim da-me vontade de m atirar da janela abaixo (o k vale e k tou no 1º andar).

O programa basicamnt consiste em ler atraves de um ficheiro "tabela.txt" ja existente uma tablela d pontuacoes de um jogo (sudoku) e dps pedir ao utilizador que introduza o nome a pontuacao respectiva para gravar num outro ficheiro novo com o nome "tabela2.txt". Tou a usar o Codeblocks no windows vista para programar e ja tenho o programa feito mas ha um erro que nao consegui resolver e por isso pedia se alguem me podia ajudar..posso mandar o codigo que tenho:

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

int main()

{
    FILE *f1;
    FILE *f2;

    char tabela[50];
    char Ntabela[50];
    char nome[50][10];
    char pontuacao[10][10];
    char Final[50][10];
    char final2 [512];

    int linha=0;

    f1=fopen("tabela.txt","r");

    for(linha=0;fgets(tabela,sizeof(tabela),f1) !=NULL; linha++)
        {
         printf("%s", tabela);
        }
    fclose(f1);
    printf("\n\n");


    for(linha=0;linha<3;linha++)
    {
        printf("Introduza o nome: ");
        gets(nome[linha]);
        printf("Introduza a pontuacao: ");
        gets(pontuacao[linha]);
    }


    for(linha=0;linha<3; linha++)
    {
        printf("%s ", nome[linha]);
        printf("Pontuacao: ");
        printf("%s\n",pontuacao[linha]);
    }
    



    f2=fopen("tabela2.txt", "w");
    linha = 0;
    for(linha=0;linha<3;linha++)
    {
        sprintf(Final[linha], "%s", &nome[linha], pontuacao[linha]);
       fwrite(Final[linha] , 1 , sizeof(Final[linha]) , f2 );
    }

   fclose(f2);


    system("pause");
}

Agradecia o quanto antes que me ajudassem por favor.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

P.S: no ficheiro "tabela.txt" tenho dados do genero:

Luis 5

Pedro 3

Jose 1

e pretende-se manter esse tipo d formato no novo ficheiro de texto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
    f2=fopen("tabela2.txt", "w");
    linha = 0;
    for(linha=0;linha<3;linha++)
    {
        sprintf(Final[linha], "%s", &nome[linha], pontuacao[linha]);
        fwrite(Final[linha] , 1 , sizeof(Final[linha]) , f2 );
    }
    fclose(f2);

Neste pedaço de código tens um "erro" na linha com o sprintf().

Estás a pedir-lhe para escrever 1 parametro (o "%s") e a mandar-lhe 2 parametros (os &nome[linha] e pontuacao[linha]).

E em vez de &nome[linha] é melhor usar só nome[linha] (sem o &).

E em vez de sprintf() seguido de fwrite(), porque é que não fazes um fprintf()?

    f2 = fopen("tabela2.txt", "w");
    for (linha=0; linha < 3; linha++)
    {
        fprintf(f2, "%s %s\n", nome[linha], pontuacao[linha]);
    }
    fclose(f2);

O teu programa nunca altera o conteúdo do ficheiro "tabela.txt" e, sempre que corre substitui o conteúdo do ficheiro "tabela2.txt" por um novo conteúdo.

Se queres acrescentar dados ao ficheiro "tabela.txt", abre-o com o modo "a"

fopen("tabela.txt", "a");

Se queres ler o que lá está e depois acrescentar dados ao ficheiro "tabela.txt", abre-o com o modo "a+"

fopen("tabela.txt", "a+");

Acho que não precisas do ficheiro "tabela2.txt" para nada.

0

Partilhar esta mensagem


Link 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