Tam Sürümünü Görmek İçin : karakter stringi
elmasekeri3000
15/10/2007, 20:04
struct competitors{
int degree;
int id;
char name[30];
char surname[30];
char branch[30];
};
yapıyı böyle tanımladım
char* sub tanımladım
sub1 = strtok( NULL, "\t" );
strcpy(compet[j].name , sub); yaptım hata aldım.
struct competitors{
int degree;
int id;
char *name;
char *surname;
char *branch;
};
struct competitors[1000];
bu sefer de böyle tanımlayıp, char *sub tanımladım.
compet[j].name = malloc(strlen(sub1));
for(in = 0; in < strlen(sub); in++)
compet[j].name[in] = sub1[in];
yaptım yine hata aldım,ne yapacağımı bilmiyorum.Yardım eder misiniz
struct competitors{
int degree;
int id;
char name[30];
char surname[30];
char branch[30];
};
Bunda bi hata yok...
char *sub yaptın tmm ama sub1 ne demek? ayrı bi değişken bu!
ayrıca compet[j] nerde ki?
struct competitors compet[20];
diye bişey yazsan hemen yapının altında tmm doğru olur.Ancak bu seferde j değerinin ne olduğu belli değil!
Eğer kodunu buraya yazarsan aynen hata aldığın şekliyle düzeltme yapmaya çalışırım..
İyi çalışmalar...
acehreli
15/10/2007, 21:10
furkans'in soylediklerin ek olarak ben de strtok'un nasil kullanildigini gosteren bir ornek yazdim. Yanlislarini bununla karsilastirarak bulabilirsin:
#include <stdio.h>
#include <string.h>
/*
* Bu yapi tek bir yarismaciyi (competitor) tanimladigi icin, ismi cogul
* olmamali.
*/
typedef struct {
int degree;
int id;
/* Bu 30'lar herhalde bazen durumda fazla kucuk kalacaklardir. O yuzden
* bunlari malloc, strdup, veya baska bir yolla ayirman gerekir. */
char name[30];
char surname[30];
char branch[30];
} competitor;
const int kayit_hatasi = -1;
/* Hem bosluk karakteri hem de tab ayrac olarak kabul ediliyor olsun */
const char * ayraclar = " \t";
int competitor_kur(competitor * yarismaci, char * kayit)
{
char * parca = NULL;
/* Bunlarin kurulumlarini bosverdim */
yarismaci->degree = 0;
yarismaci->id = 0;
/* strtok ilk cagrildiginda hangi dizgiden (kayit) okundugu
* belirtilmelidir */
parca = strtok(kayit, ayraclar);
if (!parca) {
return kayit_hatasi;
}
strcpy(yarismaci->name, parca);
/* Ayni dizgiye devam etmek icin 'strtok'a NULL gonderilir */
parca = strtok(NULL, ayraclar);
if (!parca) {
return kayit_hatasi;
}
strcpy(yarismaci->surname, parca);
/* Ayni kod blogunu cok fazla tekrarlamis olduk; aslinda bunlari bir
* isleve tasimak cok daha yararli olur. */
parca = strtok(NULL, ayraclar);
if (!parca) {
return kayit_hatasi;
}
strcpy(yarismaci->branch, parca);
return 0;
}
void competitor_yazdir(const competitor * yarismaci)
{
printf("Ad: %s, Soyad: %s, Bolum: %s\n",
yarismaci->name,
yarismaci->surname,
yarismaci->branch);
}
int main()
{
competitor yarismaci;
int hata = 0;
char giris[] = "Ali Karaali\tAscilik";
hata = competitor_kur(&yarismaci, giris);
if (hata) {
fprintf(stderr, "Okuma hatasi\n");
return 1;
}
competitor_yazdir(&yarismaci);
return 0;
}
Ali
elmasekeri3000
16/10/2007, 01:43
acehreli teşekkür ederim.
buna bakıp düzeltmeye çalışıcam ,bu ödev olduğu için açık kod veremiyorum zaten.
İyi çalışmalar...
elmasekeri3000
16/10/2007, 13:39
işe yaradı,demek ufak hataları küçümsememek gerek,bütün programa mal olabiliyor
Teşekkürler...
Umarım,ben de sizlere yardımcı olabiilirim.
quasimodo
16/10/2007, 15:42
strdup() standart bir fonksiyon degil dimi ?
acehreli
16/10/2007, 17:32
Simdi bakana kadar strdup'u standart saniyordum ama degilmis. man belgesine bakilirsa en azindan sunlara dahilmis: SVr4, 4.3BSD, POSIX.1-2001.
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.