C++ yazılan kod yanlış çalışıyor

Deep_White007

Hectopat
Katılım
18 Haziran 2016
Mesajlar
21
Herkese merhaba,

Normalde ilk if'li statement olmadığında program çalışıyor. İlk if'lı statementı kaldırdığımda bile siz sayı dışında başka bir şey girerseniz(harf, nokta vesaire)program düzgün çalışmıyor.Ben nasıl kendi yazdığım programın yapısını fazla değiştirmeden ilk if'li statementı düzeltebilirim.Eğer şuan siz sayı bile girseniz "Sorry you did not enter a number." diyor. Benim amacım sayı dışında başka bir şey girildiğinde "sayı girmediniz" diyip tekrardan girmesini istemek. Bunu nasıl yaparım ?

Not:Lütfen konu hakkında bilgi sahibi olmayan kişiler yahut komple yazdığım kodu değiştirip bam başka bir biçimde yazmamı önericek olanlar yorum yapmaz ise sevinirim.


C++:
#include <iostream>

      using namespace std;

      int main()  {

      cout<<"I will try to find out, whether the number you are going to enter is, divisible with both 13 and 17, or only with one of the 13 and 17."<< endl;

      cout<<"Please enter a number"<< endl;

      long number {0};

     cin>>number;

    

         if((!(number<=LLONG_MIN)) && (!(number>=LLONG_MAX))) {

         cout<<"Sorry you did not enter a number."<< endl;

         cout<<"Please enter a number: ";

        }

         else if( number %13==0 && number%17==0) {

         cout<<number<<" is divisible with 13 & 17."<< endl;

     }

     else if ( number%13==0) {

         cout<<number<<" is divisible with 13."<< endl;

     }

     else if( number%17==0) {

         cout<<number<<" is divisible with 17."<< endl;

     }

     else {

         cout<<number<<" is not divisible with 13 & 17."<< endl;

     }

      }
İlk if li statementda neden LLONG_MAX yaptığımı soracak olursanız, o sayı aralığının benim için yeterince büyük olması ve bu aralık dışında kalan diğer her şeyin programıma dahil edilmeyecek olmasıdır. Yani böylece sadece o sayı aralığında sayı girildiği takdirde program çalışacaktır.
 
Son düzenleyen: Moderatör:
Sorun ne ki? if içine sayı olabilecek en küçük sayıdan küçük veya eşit değilse ve sayı olabilecek en büyük sayıdan büyük veya eşit değilse demişsin. Yani sayı o ikisinin arasında olmalı. Senin girdiğin sayılar da öyle. Harf girsen kendisi cast eder muhtemelen.

O yüzden şartını şöyle yapmanı tavsiye ederim. Kaldı ki küçük veya büyük olması imkansız.
if (number <= LLONG_MIN || number >= LLONG_MAX)

Yine de kodun amacına uygun olması için string tanımlayıp inputu ona aldıktan sonra isdigit ile sayı olup olmadığını kontrol etmek bana daha mantıklı geliyor.
 
Son düzenleme:
if((!(number<=LLONG_MIN)) && (!(number>=LLONG_MAX)))

Galiba burada mantık hatası var. Mesela 10 sayısını girdik. 10 min'den daha küçük değil dolayısıyla 0, ! olduğundan 1.
10 max'dan da büyük değil yani 0 ancak !'den dolayı 1.
1 && 1 == 1. Yani if statement sağlanmış oluyor. Ünlemleri kaldırarak deneyebilirsin.
 
İf((!(number<=llong_mın)) && (!(number>=llong_maX)))

Galiba burada mantık hatası var. Mesela 10 sayısını girdik. 10 Min'den daha küçük değil dolayısıyla 0! Olduğundan 1.
10 Max'dan da büyük değil yani 0 ancak!'den dolayı 1.
1 && 1 == 1. yani if statement sağlanmış oluyor. Ünlemleri kaldırarak deneyebilirsin.

Evet hatamı şimdi gördüm. && değil de || kullanmak daha mantıklı.
 
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

Geri
Yukarı