nunolevezinho Posted February 28, 2013 at 12:36 PM Report #497364 Posted February 28, 2013 at 12:36 PM 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 *'
HappyHippyHippo Posted February 28, 2013 at 12:52 PM Report #497368 Posted February 28, 2013 at 12:52 PM 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 Portugol Plus
nunolevezinho Posted March 4, 2013 at 02:51 PM Author Report #497849 Posted March 4, 2013 at 02:51 PM (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 March 4, 2013 at 02:51 PM by nunolevezinho
HappyHippyHippo Posted March 4, 2013 at 05:05 PM Report #497867 Posted March 4, 2013 at 05:05 PM 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 Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now