Jump to content
nunolevezinho

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

Recommended Posts

nunolevezinho

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 *'

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
nunolevezinho

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

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.


×
×
  • 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.