Çözüldü Kodum niye çalışmıyor?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Ülküsüz

Hectopat
Katılım
23 Şubat 2021
Mesajlar
1.291
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Merhaba, okulda C dersine giriş yaptık bu dönem. Hocanın verdiği ödevi yapmaya çalıştım, kod derleniyor ama çalışmıyor. (Oyun1 çalışıyor, Oyun2 çalışmıyor) Bilgisayarım yok, online derleyici ile deniyorum. Bundan olabilir mi? Deneyebilir misiniz? Oyun1'de rastgele 1-10 arası numaraları tahmin etmeye çalışıyoruz. Oyun2'ds ise 3 basamaklı rastgele bir sayı oluşuyor, biz de bunu bilmeye çalışıyoruz. 10 hakkımız oluyor. Bize ipucu veriyor.
Ipucu mantığı: sayı var ve doğru yerde ise 1, sayı var ama yanlış yerde ise 9, sayı yoksa 0.
C:
#include <stdio.h>
#include <time.h>

void menu();
void calistir(int);
void oyun1();
void oyun2();

int secim=3;

int main()
{
    menu();
    return 0;
}
void menu()
{
    do{
        printf("menudesiniz, oynamak istediginiz oyunun solundaki sayiyi giriniz, cikmak icin 0 giriniz");
        printf("\n1 oyun1\n2 oyun2\n");
        scanf("%d", &secim);
        calistir(secim);
    }while (secim<0 || secim>2);
}
void calistir(int n)
{
    switch(n)
    {
        case 0: printf("kapandi...\n"); break;
        case 1: oyun1(); break;
        case 2: oyun2(); break;
    }
}
void oyun1()
{
    int hedef, basarili_as=0, yakin_as=0, basarisiz_as=0, puan=0;
    float tahmin, hata_orani, t_hata_orani=0;
    srand(time(NULL));
    printf("Rastgele beliren dusmanlari yok etmek icin 1-10 arasi sayi girin\nOyun1 Basliyor!\n");
    for(int i=0; i<10; i++)
    {
        hedef=(rand()%10)+1;
        printf("%d. dusman belirdi\tHangi konuma ates edeceksiniz: ", i+1);
        scanf("%f", &tahmin);
        hata_orani=(tahmin>hedef)?(tahmin-hedef): (hedef-tahmin);
        t_hata_orani+=hata_orani;
        printf("%d. atis hata oraniniz: %f", i+1, hata_orani);
        if(hata_orani==0)
        {
            basarili_as++;
            puan+=10;
            printf("\t basarili atis gerceklestirdiniz\n\n");
        }else if(hata_orani<=0.5)
        {
            yakin_as++;
            puan+=5;
            printf("\t yakin atis gerceklestirdiniz\n\n");
        }else
        {
            basarisiz_as++;
            printf("\t basarisiz atis gerceklestirdiniz\n\n");
        }
    }
    printf("10 atistaki toplam hataniz: %f\n", t_hata_orani);
    printf("10 atistaki toplam puaniniz: %d\n", puan);
    printf("10 atistaki toplam basarili atis sayiniz: %d\n", basarili_as);
    printf("10 atistaki toplam yakin atis sayiniz: %d\n", yakin_as);
    printf("10 atistaki toplam basarisiz atis sayiniz: %d\n", basarisiz_as);
    printf("Oyun Bitti!\n\n");
    menu();
}
void oyun2()
{
    int rsayi, tahmin, bsmk_r[3], bsmk_t[3], ipucu[3], deneme=0, puan=100;
    srand(time(NULL));
    do{
        rsayi=(rand()%900)+100;
        bsmk_r[0]=rsayi/100;
        bsmk_r[1]=(rsayi/10)%10;
        bsmk_r[2]=rsayi%10;
    }while(bsmk_r[0]==bsmk_r[1] || bsmk_r[0]==bsmk_r[2] || bsmk_r[1]==bsmk_r[2]);
    printf("Oyun2 basliyor!\n");
    while(deneme<10 && tahmin!=rsayi)
    {
        deneme++;
        printf("Tahminizi giriniz: ");
        scanf("%d", &tahmin);
        if(!(deneme==1 || deneme==10))
           printf("ipucu: %d%d%d", ipucu[0], ipucu[1], ipucu[2]);
        bsmk_t[0]=tahmin/100;
        bsmk_t[1]=(tahmin/10)%10;
        bsmk_t[2]=tahmin%10;
        for(int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                if(bsmk_t[i]==bsmk_r[j])
                   ipucu[i]=(i==j)?1:9;
                else
                   ipucu[i]=0;
            }
        }
    }
    puan-=10*(deneme-1);
    if(tahmin==rsayi)
        printf("Tebrikler, %d. denemenizde kazandiniz. Puaniniz: %d", deneme, puan);
    else
        printf("Kaybettiniz...\n");
    menu();
}

Çözdüm. #include "stdlib.h" başlık dosyasını tanımlamam gerekiyormuş ve bir yerde yanlışlıkla rand yerine srand yazmışım. Ya da klavye düzeltme yapmış işimi kolaylaştırmak için (!).

Kod zaten karman çorman, kimsenin okuyacağını sanmam. Silmeye gerek yok.
 
Son düzenleyen: Moderatör:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…