if() Bloğunu Atlama Sorunu

Başlatan Emin Aydın EROĞLU, 08 Ağustos 2014, 09:55:28

Emin Aydın EROĞLU

Arkadaşlar merhaba;
yazdığım bir kodda char dizi kontrolü yapmaya çalışıyorum fakat nedense if() bloğunun içerisine girmiyor hatta else{} nin içerisine bile girmiyor.

char sifre[10] ;
unsigned char tus_dizi[20];

if(sifre[0]==tus_dizi[0])
        {
            if(sifre[1]==tus_dizi[1])
            {
                if(sifre[2]==tus_dizi[2])
                {
                    if(sifre[3]==tus_dizi[3])
                    {
                        lcd_gotoxy(1,1);
                        lcd_yaz("Dogru");
                        lcd_gotoxy(2,1);
                        lcd_yaz("Sifre");
                    }
                }
            }
        }
        else
        {
            lcd_gotoxy(1,1);
            lcd_yaz("Yanlis");
            lcd_gotoxy(2,1);
            lcd_yaz("Sifre");
        }



Paylaştığım kod kısmını direk atlıyor devam ediyor program sebebi ne olabilir acaba?

mir_as82

Hocam kodun tamamini verirsen yorum yapabiliriz

Gökhan BEKEN

#2
sorunun if'e girmemekle alakası yoktur. İsterseniz if bloğundan hemen önce şu kodları yazın, if'e girdiğini göreceksiniz.
sifre[0]=1; tus_dizi[0]=1;
sifre[1]=1; tus_dizi[1]=1;
sifre[2]=1; tus_dizi[2]=1;
sifre[3]=1; tus_dizi[3]=1;


ayrıca iç içe if kullanmak yerine şöyle yapabilirsiniz:
if (strstr ( sifre, tus_dizi )) {}

ya da tek tek bakmam lazım illa derseniz şöyle:


if(sifre[0]==tus_dizi[0] && sifre[1]==tus_dizi[1] && sifre[2]==tus_dizi[2] && sifre[3]==tus_dizi[3])
{}


yalnız elseye girmemesi düşündürüyor. Belkide LCD kodlarınız çalışmıyor. LCD yerine sadece 1 led yakıp söndürseniz daha kolay anlarsınız.
Özel mesaj okumuyorum, lütfen göndermeyin.

kimlenbu

Hocam bu kadar if'e gerek yok

if(!strcmp(sifre,tus_dizi))
{
//doğru işlemleri
}
else
{
//yanlış işlemleri
}


şeklinde de kontrol edebilirsiniz. Kontrol etmeden önce lcd'de girilen şifreyi ve olması gereken şifreyi yazdırın, bir eşitsizlik var, belki şifre okuma bloğunuz hatalıdır.

Emin Aydın EROĞLU

Gönderdiğini şekilde yazdım çalıştı. Ben yazdığımda yanlış olsa bile else{} nin içerisine girmiyordu. Şimdi farkettim ki tus_dizi[] ye attığım değerler ascii karşılığıymış onu düzelttim şimdi çalıştı. Çok teşekkürler kolay gelsin.

mir_as82

hocam senin sorunun "integral promotion" Sorunu olabilir. Sen char türden bir dizinin elemanına c =155 değerini atadın varsayalım-->1001 1011
if ( ) bloğu içinde sen bunu 155 ile karşılaştırırsan sonucun doğru çıkmaz yani.
if(c==155)
    printf("doğru");
else
   printf("yanlis");//burası isletilir

Sebebi ise şu:Atama yaptığımız c değişkeni int türe dönüştürülür. 1001 1011-->burada negatiflik olduğundan negatifliği korumak adına sol tarafı 1 ile besler (int türü 4 byte varsayın)-->11111111 111111111 11111111 10011011
diğer tarafta ise 155 sayısı var: 00000000 00000000 00000000 1001 1011

Yani sonuçta negatif bir sayı ile pozitif bir sayı karşılaştırılır. Ve if in yanlış kısmını program işletir.

Tavsiyem if in içindeki değişkenlerin türünü aynı yapmandır.