Jump to content

[Resolvido] Ler Palavras de Ficheiro Texto e Guardar em Variavel


Recommended Posts

Posted

Boas, estou a tentar fazer com que o programa leia, de um ficheiro de texto, a primeira palavra de cada linha e as guarde numa variavel para usar depois. Acho que já consegui a parte de ler a primeira palavra de cada linhas, mas agora não estou a conseguir guardas o valor numa variavel..

O que estou a fazer mal?

void GetInfoJogadores(FILE *ficheiro_jogadores)
{
 char nome[20], jogador[10];
 int i=0;

 /* abre o ficheiro */
 ficheiro_jogadores = fopen("jogadores.txt", "r");
 if (ficheiro_jogadores == NULL) {
   printf("Não consegui abrir jogadores.txt para leitura.\n");
 }

 /* Verifica o nome dos jogadores
 "apanha" a primeira palavra de cada linha do ficheiro
 */
 while (!feof(ficheiro_jogadores)) {
   i++;
   fscanf(ficheiro_jogadores,"%s%*[^\n]",nome);
   printf("Nome: %s\n", nome);
   strcpy(nome,"");
   jogador[i] = nome;
 }
 /* fecha o ficheiro */
 fclose(ficheiro_jogadores);
}

Erro: 'char' differs in levels of indirection from 'char *'

Posted

tanto "nome" como "jogador" são arrays de caracteres (um de 20 posições e outro de 10)

como achas que seria possível colocar vinte letras vezes o número de jogadores em somente 10 ?

não dá ...

o que precisas é de uma lista de arrays, em que cada array deveria ter, pelo menos, o mesmo tamanho que a variável "nome"

o que farias de seguida seria gravar o conteúdo da variável "nome" em cada posição diferente do array "jogadores" com o auxílio da função strcpy (ou strncpy)

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)
FILE *ficheiro_jogadores;
char *nome="";
char* storage[200];
int i=0;
/* abre o ficheiro */
 ficheiro_jogadores = fopen("jogadores.txt", "r");
 if (ficheiro_jogadores == NULL) {
	 printf("Não consegui abrir jogadores.txt para leitura.\n");
 }

/* Verifica o nome dos jogadores
- apresenta a primeira palavra de cada linha do ficheiro
*/
while (!feof(ficheiro_jogadores)) {

	 fscanf(ficheiro_jogadores,"%s%*[^\n]",nome);
	 printf("Nome: %s\n", nome);
storage[i] = nome;
	 strcpy(nome,"");
i++;
 }

Agora o programa compila, mas mal que abre a janela, ela fecha e o programa termina :/

Era isto que estavas a falar?

Edited by nunolevezinho
Posted

estás muito longe do que seria esperado de quem está a aprender ponteiros/arrays/strings ...

char *nome="";      // isto é um ponteiro para uma string que se encontra numa zona de memória que não podes alterar !!!
char* storage[200]; // isto é um array para ponteiros (somente isso, ponteiros)

o que necessitarias seria

#define STRING_MAX_SIZE 100
#define MAX_NUMBER_STRINGS 1000

// ...

char storage[MAX_NUMBER_STRINGS][sTRING_MAX_SIZE];
int storage_size = 0;

// ...

while (storage_size < MAX_NUMBER_STRINGS &&                         // enquanto houver espaço para guardar
      fgets(storage[storage_size], STRING_MAX_SIZE, file))         // ler a entrada
{
 storage[storage_size][strlen(storage[storage_size]) - 1] = '\0';  // remover o '\n' final da linha lido pelo fgets
 storage_size++;                                                   // incrementar o número de elementos guardados
}
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.