CodeBlanks Logo Icon CodeBlanks

Birleştirme

Menü döngüsüyle çalışan bir CLI uygulaması yazarsın.

Birleştirme

Son ders, tüm parçaları birleştirip çalışan bir uygulama elde etme zamanı. runMenu fonksiyonu, bir başlık listesini alıp her biri için addTask çağırır. Böylece ana program tek bir çağrıyla birden fazla görev ekleyebilir.

İmza: void runMenu(std::vector<Task>& tasks, const std::vector<std::string>& titles). Gövdede range-based for ile her başlığı gez ve addTask(tasks, t) çağır. main'de bir başlık listesi tanımla, runMenu ve listTasks çağır. Bu, tüm yapı taşlarını bir araya getirir.

Menü döngüsü

runMenu fonksiyonunun gövdesi bir range-based for döngüsüdür. Bu döngü, başlık vektörünün her elemanını sırayla gezer ve addTask çağırır. Klasik indeksli döngüden daha okunaklıdır.

Yazım: for (const std::string& t : titles) { addTask(tasks, t); }. Burada t her yinelemede bir başlık alır; const ve & ile kopyasız ve salt okunur geçilir. Bu, modern C++'ın okunaklı ve verimli geze biçimidir.

Uygulama runMenu fonksiyonu

void runMenu(std::vector<Task>& tasks, const std::vector<std::string>& titles) fonksiyonunu tanımla. Gövdede range-based for ile her başlık için addTask(tasks, t) çağır. main içinde std::vector<std::string> titles = {"Ekmek al", "Süt al", "Yumurta al"}; tanımla, runMenu(tasks, titles) ve listTasks(tasks) çağır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>
#include <vector>

struct Task {
    std::string title;
    bool done;
};

void addTask(std::vector<Task>& tasks, const std::string& title) {
    Task t;
    t.title = title;
    t.done = false;
    tasks.push_back(t);
}

void listTasks(const std::vector<Task>& tasks) {
    for (size_t i = 0; i < tasks.size(); ++i) {
        if (tasks[i].done) {
            std::cout << "[x] " << tasks[i].title << "\n";
        } else {
            std::cout << "[ ] " << tasks[i].title << "\n";
        }
    }
}

void completeTask(std::vector<Task>& tasks, size_t index) {
    if (index < tasks.size()) {
        tasks[index].done = true;
    }
}

// runMenu fonksiyonunu tanımla

int main() {
    std::vector<Task> tasks;
    std::vector<std::string> titles = {"Ekmek al", "Süt al", "Yumurta al"};
    // runMenu ve listTasks çağrılarını ekle
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>
#include <vector>

struct Task {
    std::string title;
    bool done;
};

void addTask(std::vector<Task>& tasks, const std::string& title) {
    Task t;
    t.title = title;
    t.done = false;
    tasks.push_back(t);
}

void listTasks(const std::vector<Task>& tasks) {
    for (size_t i = 0; i < tasks.size(); ++i) {
        if (tasks[i].done) {
            std::cout << "[x] " << tasks[i].title << "\n";
        } else {
            std::cout << "[ ] " << tasks[i].title << "\n";
        }
    }
}

void completeTask(std::vector<Task>& tasks, size_t index) {
    if (index < tasks.size()) {
        tasks[index].done = true;
    }
}

void runMenu(std::vector<Task>& tasks, const std::vector<std::string>& titles) {
    for (const std::string& t : titles) {
        addTask(tasks, t);
    }
}

int main() {
    std::vector<Task> tasks;
    std::vector<std::string> titles = {"Ekmek al", "Süt al", "Yumurta al"};
    runMenu(tasks, titles);
    listTasks(tasks);
    return 0;
}

Beklenen çıktı

[ ] Ekmek al
[ ] Süt al
[ ] Yumurta al

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 runMenu çıktısının ilk satırı nedir?

main.cpp
std::vector<Task> tasks;
std::vector<std::string> titles = {"Ekmek al", "Süt al", "Yumurta al"};
runMenu(tasks, titles);
listTasks(tasks);
  • 1. Ekmek al
  • Ekmek al
  • [x] Ekmek al
  • [ ] Ekmek al Doğru cevap

Açıklama: İlk görev henüz tamamlanmadığı için '[ ] Ekmek al' yazılır.

2 İfadeyi anlamına eşle

Kavram Anlamı
void runMenu Fonksiyon imzası
for (const std::string& t : titles) Range-for
addTask(tasks, t) Ekleme çağrısı
runMenu(tasks, titles) Çağrı

3 runMenu gövdesi

Soru
for (const std::string& t : ____) { addTask(tasks, t); }
Cevap
for (const std::string& t : titles) { addTask(tasks, t); }

Açıklama: for (const std::string& t : titles) başlıkları gezer.

Başlangıç bölümündeki tüm dersler