Implementar um programa de gerenciamento de high scores. O programa deve:
carregar os high scores de um arquivo e mostrar. Cada high score é composto de um nome (max. 10 caracteres) e um inteiro (pontuação)
carregar os high scores de um arquivo e mostrar. Cada high score é composto de um nome (max. 10 caracteres) e um inteiro (pontuação)
Passo 1
Beleza, então a ideia aqui é fazer um programa que abra um arquivo contendo vários high scores (cada um com um nome de até 10 caracteres e uma pontuação inteira) e mostre tudo na tela. Isso envolve os tópicos de:
- Manipulação de arquivos (abrir, ler, fechar).
- Uso de estruturas (
struct
) pra guardar cada registro. - Laço de repetição pra ler até o fim do arquivo.
- Impressão formatada.
Passo 2
Primeiro, precisamos definir a teoria de
struct
em C: é um jeito de agrupar dados diferentes num único “pacote”. Aqui vamos criar:typedef struct {
char nome[11]; // +1 pra null terminator
int pontuacao;
} HighScore;
Isso significa que cada
HighScore
guarda um vetor de 11 caracteres (pra caber 10 letras + ‘\0’) e um inteiro.Passo 3
Agora, abrir o arquivo em modo de leitura. Em C, a gente faz:
FILE *arquivo = fopen("highscores.txt", "r");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo!\n");
return 1;
}
Aqui usamos
fopen
que retorna um ponteiro para FILE
. Se der NULL
, deu ruim (por exemplo, arquivo não existe).Passo 4
Pra ler até o fim, usamos um loop
while
junto com fscanf
. A função fscanf
lê formatado, igual ao scanf
. A ideia é:HighScore hs;
while (fscanf(arquivo, "%10s %d", hs.nome, &hs.pontuacao) == 2) {
// Enquanto conseguir ler um nome e um inteiro, entramos aqui
// Explicando: "%10s" garante que não ultrapassamos 10 caracteres
}
Esse
while
só continua se o fscanf
retornar 2 (número de itens lidos com sucesso).Passo 5
Dentro do loop, é só imprimir de um jeito bonitinho:
printf("Jogador: %s | Pontuação: %d\n", hs.nome, hs.pontuacao);
Depois de sair do loop, a gente fecha o arquivo pra não vazar memória:
fclose(arquivo);
Resposta
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nome[11];
int pontuacao;
} HighScore;
int main() {
FILE *arquivo = fopen("highscores.txt", "r");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo!\n");
return 1;
}
HighScore hs;
while (fscanf(arquivo, "%10s %d", hs.nome, &hs.pontuacao) == 2) {
printf("Jogador: %s | Pontuação: %d\n", hs.nome, hs.pontuacao);
}
fclose(arquivo);
return 0;
}