CodeBlanks Logo Icon CodeBlanks

Quiz oynatma

  • C kursu
  • Orta seviye
  • Ders 44/116
  • 6 dk

Run fonksiyonuyla soruları sırayla sormayı öğrenirsin.

Quiz oynatma

Üçüncü ders run_quiz fonksiyonunu tanımlar. Bu fonksiyon, soruları sırayla ekrana yazar, her birinin doğru cevaplanıp cevaplanmadığını denetler ve toplam skoru döndürür.

İmza: int run_quiz(struct Question *q, int count). Gövde: bir answers dizisi (örnek {0, 1, 2}) ile kullanıcının cevaplarını temsil eder; for döngüsüyle her soruyu yazdırır; if (answers[i] == q[i].correct) ile denetler; score++ ile sayar. Son olarak return score;. Önceki dersin çözümü başlangıç koduna dahildir.

Döngü ve denetim

run_quiz'in çekirdeği bir for döngüsü ve if denetimidir. Döngü her soruyu yazar; denetim doğru cevabı sayar.

Örnek: for (int i = 0; i < count; i++) { printf("Soru %d: %s\n", i+1, q[i].text); if (answers[i] == q[i].correct) score++; }. i+1 1-tabanlı numara verir; i 0-tabanlı indeksle erişir. answers dizisi kullanıcının cevaplarını temsil eder; gerçek bir uygulamada scanf ile okunur. Burada sabit dizi kullanıyoruz; böylece çıktı deterministik olur.

Uygulama run_quiz fonksiyonunu yaz

int run_quiz(struct Question *q, int count) yaz. Gövdede int answers[3] = {0, 1, 2}; ve int score = 0; tanımla. for (int i = 0; i < count; i++) döngüsüyle printf("Soru %d: %s\n", i + 1, q[i].text); yazdır; if (answers[i] == q[i].correct) score++; ile say. return score; döndür. main içinde int score = run_quiz(questions, count); çağır ve printf("Skor: %d\n", score); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>

struct Question {
    char text[64];
    int correct;
};

void add_question(struct Question *q, int *count, const char *text, int correct) {
    strcpy(q[*count].text, text);
    q[*count].correct = correct;
    (*count)++;
}

// int run_quiz fonksiyonunu yaz (q ve count parametreleriyle)
// her soruyu "Soru N: text" biçiminde yaz, score'u artır, döndür
// main'de run_quiz'i çağır ve "Skor: X" yazdır

int main(void) {
    struct Question questions[10];
    int count = 0;
    add_question(questions, &count, "Başkent?", 0);
    add_question(questions, &count, "2+2?", 1);
    printf("%d soru eklendi\n", count);
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>

struct Question {
    char text[64];
    int correct;
};

void add_question(struct Question *q, int *count, const char *text, int correct) {
    strcpy(q[*count].text, text);
    q[*count].correct = correct;
    (*count)++;
}

int run_quiz(struct Question *q, int count) {
    int answers[3] = {0, 1, 2};
    int score = 0;
    for (int i = 0; i < count; i++) {
        printf("Soru %d: %s\n", i + 1, q[i].text);
        if (answers[i] == q[i].correct) {
            score++;
        }
    }
    return score;
}

int main(void) {
    struct Question questions[10];
    int count = 0;
    add_question(questions, &count, "Başkent?", 0);
    add_question(questions, &count, "2+2?", 1);
    printf("%d soru eklendi\n", count);
    int score = run_quiz(questions, count);
    printf("Skor: %d\n", score);
    return 0;
}

Beklenen çıktı

2 soru eklendi
Soru 1: Başkent?
Soru 2: 2+2?
Skor: 2

Soru ve cevaplar

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

1 run_quiz fonksiyonu ne döndürür?

  • Soru metnini
  • Doğru sayısını Doğru cevap
  • Cevap dizisini
  • Soru sayısını

Açıklama: run_quiz doğru cevap sayısını döndürür.

2 run_quiz parçalarını eşle

Kavram Anlamı
for (i=0; i<count; i++) Döngü
printf("Soru %d: %s") Soru yazdırma
if (answers[i] == q[i].correct) Denetim
return score Skor döndürme

3 Döngü koşulunu tamamla

Soru
for (int i = 0; i ____; i++)
Cevap
for (int i = 0; i < count; i++)

Açıklama: i < count döngüyü count kez döndürür.

Orta seviye bölümündeki tüm dersler