C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
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
Cevabı göster
[ ] Ekmek al — İlk görev henüz tamamlanmadığı için '[ ] Ekmek al' yazılır.
-
İfadeyi anlamına eşle
- void runMenu
- Fonksiyon imzası
- for (const std::string& t : titles)
- Range-for
- addTask(tasks, t)
- Ekleme çağrısı
- runMenu(tasks, titles)
- Çağrı
-
runMenu gövdesi
for (const std::string& t : ____) { addTask(tasks, t); }
Cevabı göster
for (const std::string& t : titles) { addTask(tasks, t); }
Sıradaki ders: String akımları