Ir para o conteúdo
nunolevezinho

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

Mensagens Recomendadas

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

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Editado por nunolevezinho

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

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.