C++ Boolean Sürekli False Değerini Döndürüyor

Sertidegni

Kilopat
Katılım
10 Mayıs 2019
Mesajlar
850
Çözümler
3
C++:
#include <iostream>
using namespace std;

bool Testing() {
    static int Variable = 0;

    if (Variable == 1) return true;
    else {
        Variable = 1;
        Testing();
    }

    return false;
}

int main()
{
    if (Testing()) cout << "True";
    else cout << "False";
}

Yukarıdaki fonksiyon kendi içerisinde tekrar çağırıldığında if (Variable == 1) kısmı true döndüğü halde içerisindeki return true; komutu çalışmıyor ve ardından gelen hiçbir komut çalışmıyor.
 
C++:
#include <iostream>
using namespace std;

bool Testing() {
     cout<<"Variable set to 0"<<endl;
    static int Variable = 0;

    if (Variable == 1)
    {
        cout<<"Returned true"<<endl;
        return true;}
    else {
        cout<<"Variable set to 1"<<endl;
        Variable = 1;
         cout<<"Calling function again"<<endl;
        Testing();
    }

    cout << "inner returned false"<<endl;
    return false;
}

int main()
{
    if (Testing()) cout << "True";
    else cout << "False";
}

Bak şimdi sana çok güzel bir kod parçası atayım. Al kodun ne yapıyor gör, debugda kafan karışmış gibi.
 
Son düzenleme:
İçteki fonksiyondan kastınız nedir? Breakpoint koyduğumda return true çalıştıktan sonra fonksiyonun dışına çıkıyor ancak tekrar girip sadece return false kısmını çalıştırıyor. Bu kısmını tam anlamadım.
Fonksiyonun dışına çıkmıyor. Boşver şimdi break pointi kodu takip et. Else kısmına girdiğinde fonksiyona tekrar giriyorsun ve true döndürüyorsun ama kod fonksiyonu tekrar çağırdığın else kısmından devam ediyor. Sonra return false diyerek maine dönüyor.

Yani ikinci çağırdığın fonksiyon aynı fonksiyon olsa bile bambaşka bir fonksiyon olarak iş yapar. Recursive mantığını yanlış anlamışsın. Tekrar çalışman gerek.

Ek olarak senin yazdığın koda değil başka koda bakıyormuşum. @Whakii 'nin koduna göre cevap veriyorum. Senin kodun tamamen yanlış.
 
Fonksiyonun dışına çıkmıyor. Boşver şimdi break pointi kodu takip et. Else kısmına girdiğinde fonksiyona tekrar giriyorsun ve true döndürüyorsun ama kod fonksiyonu tekrar çağırdığın else kısmından devam ediyor. Sonra return false diyerek maine dönüyor.

Yani ikinci çağırdığın fonksiyon aynı fonksiyon olsa bile bambaşka bir fonksiyon olarak iş yapar. Recursive mantığını yanlış anlamışsın. Tekrar çalışman gerek.
Fonksiyonu int main()'den çalıştırdığımda int main()'e false değerini döndürüyor. bool Testing()'den çalıştırdığımda return true değerini bool Testing()'e mi döndürüyor?
 
Normalde fonksiyonu çağırırken return Testing() şeklinde çağırdığımda çalışıyor. Bunu denediğimde garip geldi. Dediğiniz gibi tekrar çalışmam gerek ancak doğru düzgün kaynak bulamıyorum.
Ek olarak senin yazdığın koda değil başka koda bakıyormuşum. @Whakii 'nin koduna göre cevap veriyorum. Senin kodun tamamen yanlış.
Senin kodunda fonksiyona her girdiğinde değişkeni 0 yaptığın için kod döngüye giriyor olması lazım.
 
C++:
#include <iostream>
using namespace std;

bool Testing() {
     cout<<"Variable set to 0"<<endl;
    static int Variable = 0;

    if (Variable == 1)
    {
        cout<<"Returned true"<<endl;
        return true;}
    else {
        cout<<"Variable set to 1"<<endl;
        Variable = 1;
         cout<<"Calling function again"<<endl;
        Testing();
    }

    cout << "inner returned false"<<endl;
    return false;
}

int main()
{
    if (Testing()) cout << "True";
    else cout << "False";
}

Bak şimdi sana çok güzel bir kod parçası atayım. Al kodun ne yapıyor gör, debugda kafan karışmış gibi.
Teşekkür ederim. Biraz daha aydınlatıcı oldu.

Emin olmak şu sorumu size de yönelteyim:
Fonksiyonu int main()'den çalıştırdığımda int main()'e false değerini döndürüyor. bool Testing()'den çalıştırdığımda return true değerini bool Testing()'e mi döndürüyor?
 
Fonksiyonu int main()'den çalıştırdığımda int main()'e false değerini döndürüyor. bool Testing()'den çalıştırdığımda return true değerini bool Testing()'e mi döndürüyor?
Evet, tam bunu yapıyor.

Bak ilk sayfada ne demişim :D İçteki fonksiyon Testing'i tekrar çağırdığın yer.

Tamam ama recursive bu şekilde çalışmaz. Sen fonksiyonun en sonunda yine false döndürüyorsun. Yani fonksiyon 2. çalıştırdığında true döndürüyor ama kendi içinde true döndürüyor. En sonunda main methoda yine false dönüyor.
 
Emin olmak şu sorumu size de yönelteyim:

Programda fonksiyonu nerede çağırdıysan işi bittiğinde yine oraya döner.

Recursive mantığını da tree örneklerinden daha iyi anlarsın. Fonksiyona ilk düğümden girer, alt düğümleri bitirene kadar gezinir; en son yine ilk düğümde bitirir.
 
Evet, tam bunu yapıyor.

Bak ilk sayfada ne demişim :D İçteki fonksiyon Testing'i tekrar çağırdığın yer.
C++:
#include <iostream>

bool Function() {
    static int Variable = 0;

    if (Variable == 1) return true;
    else {
        Variable = 1;
        Function();
    }

    if (Function()) std::cout << "bool Function() is True\n";
    else std::cout << "bool Function() is False\n";

    return false;
}

int main()
{
    if (Function()) std::cout << "int main() is True";
    else std::cout << "int main() is False";
}

Bu şekilde denediğimde anlamış oldum. Çok teşekkür ederim.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı