Tam Sürümünü Görmek İçin : C ile dizin listeleme
HKarakus
24/11/2004, 02:30
C ile nasıl dizin listelenir?
Yani unixdeki -ls komutu C de nasıl programlanır?
acehreli
24/11/2004, 10:03
opendir, readdir ve closedir islevleri ise yarar gibi duruyorlar. opendir ile dizine erisebilirsin:
DIR * dizin = opendir(dizinAdi);
readdir ile kutukleri teker teker okuyabilirsin:
struct dirent * satir = NULL;
/* ... */
satir = readdir(dizin);
(Baska kutuk kalmadiginda readdir NULL dondurur.) Ondan sonra da dizini closedir ile kapatirsin:
closedir(dizin);
Ali
HKarakus
28/11/2004, 19:11
teşekkürler
peki dizinleri nasıl sıralarız?
bunun için qsort kullanabilirmiyiz?
acehreli
28/11/2004, 19:46
qsort ile C'deki her turlu diziyi siralayabiliriz. (Not: qsort C++'ta ancak bazi ozel siniflarla calisabilir, cunku qsort kopyalayici islev cagirmadan, bitleri oradan oraya kopyalayarak siralar. C++'ta std::sort onerilir.)
Elim degmisken bir ornek yazdim :)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char * ad;
int yas;
}
Insan;
Insan cocuklar[] =
{
{ "Ali", 3 },
{ "Veli", 2 },
{ "Ayse", 1 }
};
#define NESNE_ADEDI(x) (sizeof(x) / sizeof(*(x)))
int Insan_ad_karsilastiran(const void * b, const void * i)
{
/* Once gercek turlerine donusturelim */
const Insan * birinci = b;
const Insan * ikinci = i;
return strcmp(birinci->ad, ikinci->ad);
}
int Insan_yas_karsilastiran(const void * b, const void * i)
{
/* Once gercek turlerine donusturelim */
const Insan * birinci = b;
const Insan * ikinci = i;
if (birinci->yas < ikinci->yas) return -1;
else if (birinci->yas == ikinci->yas) return 0;
else return 1;
}
void Insan_yazdir(const Insan * insan)
{
printf("%s (%d)\n", insan->ad, insan->yas);
}
void Insanlar_yazdir(const Insan * insanlar, int adet)
{
int i = 0;
for (i = 0; i != adet; ++i)
{
Insan_yazdir(&insanlar[i]);
}
}
int main()
{
printf("Simdi isim sirasindalar:\n");
qsort(cocuklar,
NESNE_ADEDI(cocuklar), sizeof(Insan),
Insan_ad_karsilastiran);
Insanlar_yazdir(cocuklar, NESNE_ADEDI(cocuklar));
printf("\nSimdi yas sirasindalar:\n");
qsort(cocuklar,
NESNE_ADEDI(cocuklar), sizeof(Insan),
Insan_yas_karsilastiran);
Insanlar_yazdir(cocuklar, NESNE_ADEDI(cocuklar));
return EXIT_SUCCESS;
}
Ali
HKarakus
28/11/2004, 19:51
son parametre bir fonksiyon ve benim kodum bunda hata veriyo? Çok basit doğru bi karşılaştırma fonksiyonu yazdım ama hata verdi,her neyse benim bu fonksiyonu dizinlere uygulamam lazım
acehreli
28/11/2004, 21:02
HKarakus, sen orada oldugun icin hatanin ne oldugunu cok iyi gorebiliyorsun. Biz buradan bakinca hicbir fikrimiz olamiyor. Derleme hatasi mi yoksa calisma zamani hatasi mi oldugunu bile bilmiyorum... :)
O karsilastirma islevini ve onu nasil cagirdigini gosterirsen belki senin gozunden kacan bir seyi biz gorebiliriz.
Ali
Ödevlerimizi kendimiz yapalım.
HKarakus
29/11/2004, 12:20
INSAF HOCAM SANKI ÖDEVIMI BEN MILLETE YAPTıRıYORUM.kendim yapıyorum tabii ki. Ama tıkandığım noktalarda fikir alışverişi yapıyorum.Biz insanız hocam ve insanlarla tartışıyoruz,veri iletişimi yapıyoruz.Eğer siz böyle davranmaya devam ederseniz, ve bunu savunursanız insanlar sadece bilgisayarlarla konuşacak.
Dikkat ederseniz ben kodumu veya hatamı birebir göstermiyorum.DİKKAT!
Ve kimseden bi kod parçası istemiyorum.
önyargılarınızdan kurtulun lütfen!
HKarakus
29/11/2004, 12:21
bu arada utf-8 kullandığım için garib çıktı karakterler.umarım yazdıklarımı okuyabilirsiniz.Bunu da türkçe karakter kodlaması ile yazdım.
HKarakus
29/11/2004, 12:25
INSAF HOCAM SANKI öDEVIMI BEN MILLETE YAPTIRIYORUM.kendim yapıyorum tabii ki. Ama tıkandığım noktalarda fikir alışverişi yapıyorum.Biz insanız hocam ve insanlarla tartışıyoruz,veri iletişimi yapıyoruz.Eğer siz böyle davranmaya devam ederseniz, ve bunu savunursanız insanlar sadece bilgisayarlarla konuşacak.
Dikkat ederseniz ben kodumu veya hatamı birebir göstermiyorum.DiKKAT!
Ve kimseden bi kod parçası istemiyorum.
Öyargılarınızdan kurtulun lütfen!
__________________
Tıkandığın nokta "dizin listelemek" mi? Sanki ödevin tamamı olmuş. Bu konuyu tabi ki burada değil bölümde ayrıca görüşeceğiz.
Bu ödev de neyin nesi diye merak edenlere:
ftp://ftp.cs.hacettepe.edu.tr/pub/dersler/BIL2XX/BIL235_PL-I/04-05/3/BIL235_04-05_3.html
:-)
Arkantos
29/11/2004, 20:09
Tüh be .. :p Hocaya yakalanmak pek iyi bir durum olmasa gerek :D
HKarakus
03/12/2004, 11:50
hayır aksine ben hocanın bu forumda olduğunu biliyordum. Hoca beni yanlış anlamış arkadaşlar bu mevzuyu aramızda konuştuk,siz merak etmeyin. Ayrıca hocaya yakalanıcak bir durum yok ortada.
Arkantos
03/12/2004, 12:05
Bu bir espriydi sadece... :p
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.