Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

if(sayi<0) problemi

Başlatan Elektron74, 26 Eylül 2009, 18:01:11

Elektron74

if(!input(azalt))
      {
        
         while(!input(azalt));         // Buton bırakıldı mı diye bakılıyor
         sayi--;                       // Değişken azaltlıyor 
         
         if(sayi<0)                   // Eğer değişken 0'dan küçükse 99 oluyor
            sayi=99;
      }

Arkadaşlar yukardaki program parçasında sayi değerini hiç bir zaman 99 yapamadım. Sayi değişkenini int olarak tanımladım.
CCS, unsigned variable is never less than zero uyarısında bulnuyor.  
Bir zahmet yardım. :(
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

z

Kullandigin derleyici int tanimi unsigned int kabul ediyor gorunuyor.

int yerine signed int yazmayi dene.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Elektron74

@Z
Öncelikle çok teşekkür ederim. Problem dediniz şekilde çözüldü. Fakat anlamadığım nokta var. CCS C de işaretli sayı tanımlamak için "int" belirteci yeterli değilmi?
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

z

CCS hakkinda bilgim yok ancak C de integer tanimi, degiskenin, uzunluguna ilave olarak isaretli sayilar icin kullanilacagini belirtiyor diye biliyorum.

Eger boyle ise neden CCS integeri isaretsiz degisken kabul etti anlamadim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

bazı derleyicilerde , önüne işaret bilgisi konulmayan sayının  işaretli mi?, işaretsiz mi? kabul edileceği ayarlanabiliyor. derleyici ayarlarında vardır muhtemelen.

Erhan YILMAZ

int tanımı bazen sorun oluşturabiliyor. ccsde int8,int16 diye tanımlama yapılabilmesi lazım. int yazınca otomatik int16 algılıyor olabilir bu yüzden c de 8bit değişkenler için char tipi değişken kullanmak en iyisi

mir_as82

Arkadaşlar bende projemde bunu yaşadım IF li tabirin içi sıfırdan küçükse problem oluşturabiliyor. Bunu şöyle çözebilirsiniz. referans ın değerini if den önce sabit bir sayı ile toplayıp if in içinde sıfırdan küçük olmasını engellersiniz daha sonra o sabit değerden çıkarırsınız. Örneğin referans değer referans=200 olsun, değişken ise degisken= 220 olsun
fark=referans-degisken+255; //fark ın sıfırdan küçük olmasını engelledik
if(fark<255)
{
.............      //değeriniz sıfırdan küçükse yapacaklarınız

}
else
{
...................
}
fark değerini if in dışına çıktığınız zaman fark=fark-255 yapıp orjinal değerini verebilirsiniz. Kurgulama artık size ait. Ama if in içini negatif yapmamaya dikkat edin.

Elektron74

Alıntı yapılan: "Klein"bazı derleyicilerde , önüne işaret bilgisi konulmayan sayının  işaretli mi?, işaretsiz mi? kabul edileceği ayarlanabiliyor. derleyici ayarlarında vardır muhtemelen.
Options seçeneklerine  felan baktım. Söylediğiniz ayarları bulamadım. CCS C derleyicisinin bu özelliğini bilen arkadaş  paylaşırsa sevinirim.

Alıntı yapılan: "tamirci_erhan"int tanımı bazen sorun oluşturabiliyor. ccsde int8,int16 diye tanımlama yapılabilmesi lazım. int yazınca otomatik int16 algılıyor olabilir bu yüzden c de 8bit değişkenler için char tipi değişken kullanmak en iyisi
int8 ve int16 tanımlamalarını da işaretsiz kabul ediyor. İşaretli olabilmesi için "signed" ile birlikte kullanmak gerekiyor.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

SiVRiSiNEK

programının başına

#type signed


yazarsan değişkenlerin varsayılan olarak signed olarak tanımlanır, yoksa CCS varsayılan olarak unsigned kabul eder

Help dosyasında #type direktifini inceleyin başka işlerede yarıyor

Elektron74

@SiVRiSiNEK
Söylediğinizi test ettim doğrudur. Başka ne işe yarıyor bu #type? ingilizcem iyi olmadığından anlayamadım. Yardımcı olursanız sevinirim Teşekkürler.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

SiVRiSiNEK

mesela default olarak CCS
short tipi 1bit
int tipi 8bit
long tipi ise 16bit değişken olarak kabul ediyormuş

aşağıdaki şekilde short, int ve long tiplerinin uzunluklarını değiştirebilirsin mesela

#TYPE   SHORT=8, INT=16, LONG=32


değişkenlerin tanımlandığı varsayılan RAM bölgesinide değiştirebiliyorsun ama orasını çok incelemedim açıkçası

Elektron74

@SiVRiSiNEK
Önemli bilgiler bunlar. Teşekküler.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

controller

İşaretsiz tamsayı ile şöyle bir çözümde kullanılabilir.

     sayi--;    

      if(sayi>99) 
            sayi=99;
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

tacettin

sayi--;  

     if(sayi>99)
           sayi=99;

sayı 0 dan aşağıya düştüğünde 255 değerini alır ve 99 dan büyük olmuş olur :)

serdararikan

sayi<0 demişsin ama verilen hataya bakarak senin sayı değişkenini unsigned olarak tanımladığın veya derleyicinin default tanımlamasının unsigned olduğu anlaşılıyor.unsigned bir değişken hiçbirzaman 0 dan küçük olamaz verilen hatada bunu diyor zaten.değişkeni signed olarak tanımlarsan o zaman problem çözülür.