Das letzte Beispiel der Zehner-Serie ist ein kleines C++-Konsolenprogramm. Es liest Highscores aus einer Datei, fügt einen Eintrag hinzu und sortiert die Rangliste.
Projektstruktur
highscore/
CMakeLists.txt
src/main.cpp
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(Highscore LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(highscore src/main.cpp)
if(MSVC)
target_compile_options(highscore PRIVATE /W4)
else()
target_compile_options(highscore PRIVATE -Wall -Wextra -Wpedantic)
endif()
src/main.cpp
#include <algorithm>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
struct Score{std::string name;int points;};
int main(){
std::vector<Score> scores;
std::ifstream input("scores.txt");
Score item;
while(input>>item.name>>item.points)scores.push_back(item);
std::cout<<"Name und Punkte: ";
if(!(std::cin>>item.name>>item.points)||item.points<0){
std::cerr<<"Ungültige Eingabe
";return 1;
}
scores.push_back(item);
std::ranges::sort(scores,{},&Score::points);
std::ranges::reverse(scores);
if(scores.size()>10)scores.resize(10);
std::ofstream output("scores.txt");
std::cout<<"Top Scores
";
for(const auto& score:scores){
output<<score.name<<' '<<score.points<<'
';
std::cout<<score.name<<" - "<<score.points<<'
';
}
}
Kompilieren
cmake -S . -B build
cmake --build build
Starten
# Linux/macOS oder Single-Config-Generator
./build/highscore
# Visual Studio Multi-Config
build/Debug/highscore.exe
Testszenarien
- Leere oder fehlende Datei
- Negative Punktzahl
- Mehr als zehn Einträge
- Gleiche Punktzahlen
Folgeprompts
- CSV-Format mit Leerzeichen in Namen
- Separate Klasse für das Repository
- Unit-Tests für Laden, Sortieren und Speichern