Birleştirme
- C++ kursu
- Başlangıç
- Ders 87/116
- 6 dk
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
#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
#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?
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
for (const std::string& t : ____) { addTask(tasks, t); }
for (const std::string& t : titles) { addTask(tasks, t); }
Açıklama: for (const std::string& t : titles) başlıkları gezer.