C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

Yuunus

Builder 6 ise kurek kolay, zaten eski derleyici, her tarafta kuregi vardir;bulamazsan kurekleriz.

yamak

Hocam neden Qt kullanmaıyosunuz.Zaten ücretsiz.

yansıma

merhaba arkadaşlar

1)#define x       (myStruct *)0x100000000
2)#define x       ((myStruct *)0x100000000)

1.sinde oluşturduğum yöntemle mySruct yapısının elemanlarına erişemiyorum ama 2. ifadede parantez koyarak istediğim şekilde yapı elemanlaraına erişiyorum

Parantez bu işi nasıl etkiliyor anlayamadım?



mir_as82

#888
Oncelik problemi olusuyordur. Operator öncelik tablosundan kaynaklanabilir.
Define ile siz sadece akilli yer değiştirme yapıyorsunuz. Olaya o gözle bakin. Yazdiginiz kodda gidin x yerine define ile tanımlanan ifadeyi yazin sonra bakin ne oluyor.

mesaj birleştirme:: 16 Ocak 2015, 00:43:20

Yani hani "oku baban gibi, eşek olma" ile
"Oku, baban gibi eşek olma"  daki virgül kaymasini programa uyarla, senin hatan da öyle birşey.

unknownperson

Kütüphanedeki isdigit, isxdigit vs. kodlarını etkin kullanabilmek için denemeler yapıyordum, kullanıcıdan bir giriş(harf,numara vs.) alıp bunun digit olup olmadığını yazan bir program yazayım dedim. Programdaki sorun şu if kısmına girmiyor daha doğrusu elseden çıkıp gidiyor, büyük ihtimal if'in koşulunda hata var ama benim kullandığım gibi kullananlar olmuş internette sorunu anlayamadım  :o

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
main(){
	
	int x,y;
	printf("Please press any button from keyboard");
	scanf("%d",&x);
	y=isdigit(x);
	if(y)                   // y==1'i de denedim
{
		printf("%d is a digit.",x);
	}
	else{
		printf("%d is a not digit.",x);
	}
	
	return 0;
	
}

mir_as82

Hocam scanf("%c", &x); ile dener misin?

unknownperson

Alıntı yapılan: mir_as82 - 11 Şubat 2015, 11:48:18
Hocam scanf("%c", &x); ile dener misin?
Evet hocam dediğiniz gibi yapınca düzeldi, şimdi bu kodların içine int koyulucak denmiş o nedenle ben x'i hep int diye düşündüm, %c ile kullanmak gerekiyorsa başta ben x'i char mı tanımlamalıyım yoksa integer mı ? (denedim iki türlü de doğru çalışıyor sebebi nedendir ? )

mir_as82

#892
hocam olay karakter kodunda bitiyor. Sen int değişken tanımla, sıkıntı yok. Ama onun içine dışardan klavye ile alacağın şeyi eğer %c olarak almazsan, fonksiyona ascii kodunu göndermemiş olursun.
Meselan sen y=isdigit(48) gönderirsen sana nonezero döndürmesi lazım.
Çünkü 48 sıfırın ascii kodu.



mesaj birleştirme:: 11 Şubat 2015, 12:08:12

Ama sen dışardan 9 e basıp adama 9 verirsen, adam ascii tablosunda 9 a bakar, hee der 9 un ascii kodu TAB tuşu. O zaman sana zero döndürür.

unknownperson

Alıntı yapılan: mir_as82 - 11 Şubat 2015, 12:05:26
hocam olay karakter kodunda bitiyor. Sen int değişken tanımla, sıkıntı yok. Ama onun içine dışardan klavye ile alacağın şeyi eğer %c olarak almazsan, fonksiyona ascii kodunu göndermemiş olursun.
Meselan sen y=isdigit(48) gönderirsen sana nonezero döndürmesi lazım.
Çünkü 48 sıfırın ascii kodu.


mesaj birleştirme:: 11 Şubat 2015, 12:08:12

Ama sen dışardan 9 e basıp adama 9 verirsen, adam ascii tablosunda 9 a bakar, hee der 9 un ascii kodu TAB tuşu. O zaman sana zero döndürür.

Anladım, teşekkür ederim.

mir_as82


unknownperson

strcpy ile strncpy arasındaki fark strncpy'nin string'in sonuna null karakterini koymaması diye biliyorum. Bunu C de uygulayarak göreyim dedim, aşağıdaki gibi bir kod yazdım. Normalde null karakter olmadığından dolayı for döngüsünün içinde sonsuz döngü olması gerekirken, derleyince fordan çıkıp sonraki "End" yazısını yazıyor. Bunun nedeni nedir ?
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

main(){
	int i=0;
	char s1[20];
	char s2[]="David Guetta Concert";
	
	printf("%s",strncpy(s1,s2,20));
	
	for(i=0;s1[i]!='\0';i++){
		
		printf("%c",s1[i]);
		
	}
	
	printf("\nEnd");
	return 0;
}

oyaz

Burada dizi taşması oluşturuyorsun.

Aşağıdaki kod ile for dan doğru şekilde çıkıp çıkmadığını anlayabilirsin.

Bu şekilde end yazmıyor ekrana.

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

main(){
    int i=0;
    char s1[20];
    char s2[]="David Guetta Concert";
    
    printf("%s",strncpy(s1,s2,20));
    
    for(i=0;s1[i]!='\0';i++){
        
        printf("%c",s1[i]);
        
    }

    if( i == 20 )
    printf("\nEnd");        // Boyle yaparak for dan doğru bir şekilde çıkıp çıkmadığını anlarsın.


    return 0;
}
Become a learning machine...

unknownperson

Dizi taşması derken ? Dediğin şekilde de çalıştırdım gene End yazdı hatta sadece i=20 de iken end yazıyor. Dizinin 20. karakterine NULL karakterini koyuyor. s1 dizisinin kapasitesi 15 olsa bile s2 deki tüm karakterleri s1'e yazıp ardına Null koyuyor. O zaman strncpy komutu null karakterini yazıyor ya da bunu otomatik olarak dizi yapıyor  :o

unknownperson

Dev C kullanıyorum program çıktımda bir tablo olacak bu nedenle dos ekranı büyük olmalı en az 800x600 , bunu nasıl yapabilirim ?

z

Alıntı yapılan: unknownperson - 18 Şubat 2015, 15:55:07
strcpy ile strncpy arasındaki fark strncpy'nin string'in sonuna null karakterini koymaması diye biliyorum. Bunu C de uygulayarak göreyim dedim, aşağıdaki gibi bir kod yazdım. Normalde null karakter olmadığından dolayı for döngüsünün içinde sonsuz döngü olması gerekirken, derleyince fordan çıkıp sonraki "End" yazısını yazıyor. Bunun nedeni nedir ?

S değişkeni için ayrılan alanda null"u bulamasa bile ramda illaki bir null bulacaktır.

Sonucta S ram içinde bir yer kaplıyor ama S'in bitiminde diğer değişkenlerin yada boş kullanılmayan alanlar var. Bunlardan biri illaki sıfırdır ve bunu buluyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com