deryadeniz
08/03/2007, 17:24
ya ben c de getline fonksiyonu kulanarak örneğin c=a+b şeklindeki bir eşitlikteki bütün karakterleri nasıl okuyacağımı bilmiyorum.yardımcı olun.
acehreli
08/03/2007, 20:40
getline'dan haberim yoktu. Anladigim kadariyla gets'in zararlarina karsi GNU tarafindan eklenmis bir islev.
Kullanmak icin, once malloc'u cagirarak satirdaki butun karakterleri tutacagini dusundugunuz kadar yer ayiriyorsunuz, sonra getline satiri oraya okuyor. Siz malloc'la ayirmak yerine NULL gonderirseniz, getline sizin icin de malloc'u cagiriyormus. Hatta eger ayirdiginiz yer yeterli degilse bu sefer realloc ile daha buyuk yer ayiriyormus. (Bunlari Google'da "man: getline" diye aratarak ogrendim.)
Kucuk bir ornek:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void karakterleri_goster(const char * dizgi, size_t toplam_karakter)
{
size_t i = 0;
for ( ; i != toplam_karakter; ++i) {
const char gosterilecek_karakter = (!iscntrl(dizgi[i])
? dizgi[i]
: ' ');
printf("%3u: %c (%d)\n", i, gosterilecek_karakter, dizgi[i]);
}
}
int main()
{
char * satir = NULL;
size_t bellek_buyuklugu = 0;
size_t toplam_karakter = getline(&satir, &bellek_buyuklugu, stdin);
if (toplam_karakter == -1) {
fprintf(stderr, "Okuyamadim :(\n");
}
else {
printf("getline %u karakterlik yer ayirmis\n", bellek_buyuklugu);
printf("Satirda %u karakter var\n", toplam_karakter);
karakterleri_goster(satir, toplam_karakter);
}
free(satir);
}
Sozcukleri ayirmak icin strtok islevi yararli olabilir.
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.