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)

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:
  1. Manipulação de arquivos (abrir, ler, fechar).
  2. Uso de estruturas (struct) pra guardar cada registro.
  3. Laço de repetição pra ler até o fim do arquivo.
  4. 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;
}

Exercícios relacionados