sanırım bug buldum :D

Başlatan hedzuben, 02 Nisan 2010 - 21:37:16

« önceki - sonraki »

0 Üyeler ve 5 Ziyaretçi konuyu incelemekte.

hedzuben

Hayır! Başka bir nedenden ötürü sonsuz döngüye girmiş ama çözdüm. fread ile kaç eleman olduğunu sayıyorum. Teşekkür ederim :)

sem

Aynen ben de bir kere bölümümle alakalı bir program yazdığımda dediğiniz gibi önceden eleman sayısını almak için o şekilde bir yöntem izlemiştim. Sonradan rewind uyguladıktan sonra sorun kalmıyor... Fakat uyarayım benim gene sonradan anladığım bir konu için ; siz de eğer normalde teker teker veri okumanız gerekirse veri sayısı, en sonda space ya da enter karakteri olursa bir fazla çıkıyor. Aslında çok doğal bu ama orda o karakterleri bulmak zor olmuştu benim için... Belki sizi de etkiler diye söylemek istedim... Kolay gelsin.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben


struct muzik
{
char baslik[50],sanatci[50],album[50],tarz[20];
int no;
} sarki;

void ara ()
{
        fp=fopen("mk.dat","a+");
        char girdi[50];
        cout<<"1- Parca Basligina Gore\n";
cout<<"2- Sanatci Ismine Gore\n";
cout<<"3- Albume Gore\n";
cout<<"4- Tarza Gore\n";
cout<<"4- Numaraya Gore\n";
switch (getch())
{
case '1':
#define alan sarki.baslik
break;
case '2':
#define alan sarki.sanatci
break;
case '3':
#define alan sarki.album
break;
case '4':
#define alan sarki.tarz
break;
case '5':
#define alan sarki.no //Bu satırı yazmazsam hata vermiyor. Ama yazmam lazım :)
break;
}
system("cls");
cin>>girdi;
fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
if (!strcmp(alan,girdi)) //Burada hata veriyor. Çünkü duruma göre hem string hem integer değer gelebiliyor.
cout<<"Kayit\lar Bulundu: "<<alan<<"\n";
else
cout<<"Kayit Bulunamadi!";
}
fclose(fp);
system("pause");
}



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 10 Nisan 2010 - 22:13:33

Bir sorum daha var. Bir fonksiyondan duruma göre hem integer hem string değer dönme ihtimali varsa fonksiyon tipi nasıl tanımlanır.

sem

String değeri karakter dizisinde tutuyoruz. Dizilerin isimleri, adres bilgisini gösterdiği için, geri dönüş değerini void gösterici olarak tanımlarsan, sonra geri dönüş değerini doğal olarak bir void göstericiye atarsan, geri dönüş değerini alan void gösterici adres bilgisini de integer'ı da tutabilir diye düşünüyorum... Çıkmam gerekiyor şimdilik, denemeden yazdım... Kolay gelsin.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben

#29
Aşağıdaki fonksiyonun çıkış tipi ne olarak tanımlanmalıdır.

struct muzik
{
char baslik[50],sanatci[50],album[50],tarz[20];
int no;
} sarki;

tip fonk1() //Bu fonksiyonun tipi ne olaki?
{
        cout<<"SİL MENUSU\n";
cout<<"1- Parca Basligina Gore\n";
cout<<"2- Sanatci Ismine Gore\n";
cout<<"3- Albume Gore\n";
cout<<"4- Tarza Gore\n";
cout<<"5- Numaraya Gore\n";
switch (getch())
{
case '1': return(sarki.baslik);
case '2': return(sarki.sanatci);
case '3': return(sarki.album);
case '4': return(sarki.tarz);
case '5': return(sarki.no);
}
}

sem

Evet fonksiyon hem integer hem de char[] olarak dönebiliyor. void * türüne geri dönerseniz iki bilgiyi de atayabilirsiniz... fonksiyon içinde bir void gösterici tanımlayıp sonra geri döneceğiniz değeri ona atayabilirsiniz. void türünden pointer'ınız mesela "donus"  ise once;
donus = sarki.baslik; || *donus = sarki.no;
daha sonra;
return donus;
şeklinde geri dönerseniz iki değeri de tutabilirsiniz.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben

Fonksiyonun çıkış değerini void tanımladığımda hata verdi. Aslında şöyle de olabilir. Fonksiyonun tipini char tanımlarım. Yanlızca case '5' de int, diğerlerinde char döndüğüne göre; case '5' i return(characevir(sarki.no)) şeklinde yazsam olabilir. Şimdi inteğerden stringe çevirme fonk araştırıyorum.

sem

Alıntı yapılan: sem0900 - 11 Nisan 2010 - 18:17:44
Evet fonksiyon hem integer hem de char[] olarak dönebiliyor. void * türüne geri dönerseniz iki bilgiyi de atayabilirsiniz... fonksiyon içinde bir void gösterici tanımlayıp sonra geri döneceğiniz değeri ona atayabilirsiniz. void türünden pointer'ınız mesela "donus"  ise once;
donus = sarki.baslik; || *donus = sarki.no;
daha sonra;
return donus;
şeklinde geri dönerseniz iki değeri de tutabilirsiniz.
--->>>hedzuben, kodları da bir daha kontrol et derim, bazı yerlerde yanlışlık var eğer ki ben yanlış anlamadıysam
* tarza göre ve numaraya göre olan seçimlerin giriş kodları aynı gözüküyor
* case'5'  return(alan sarki.no)   ; burdaki alan neyi temsil ediyor?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 11 Nisan 2010 - 18:38:08

Değiştir yerine alııntıya basmışım yanlışlıkla, aceleden oldu sanırım, hedzuben, fonksiyonun geri dönüş değerini void olarak tanımlarsan hata alırsın, o fonksiyonun geri dönüş değeri yok anlamına gelir, ama void gösterici olarak tanımlarsan hata alacağını sanmıyorum. sen void mi yaptın void gösterici mi?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben

void fonk ()
{
     cout<<"Bu şekilde tanımladım.";
}

Bu arada kodlarımı düzelttim.

sem

aynı şekilde sadece * farklıyla;

void * fonk(); //bu şekilde olacak prototipin. Parametreleri hesaba katmadım. Geri dönüş değeri için konuşuyorum fakat bu şekilde tasarlarsan da fonksiyon içinde bir void gösterici tanımlayıp return değerini önce ona atamalısın... yukardaki mesajlarımda belirttiğim "donus" değişkenini void gösterici olarak düşün... O şekilde ilerleyeceksin
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben


void * menu (char menu[])
{
        fread(&sarki,sizeof(struct muzik),1,fp);
void *donus;
*donus=sarki.no; //cannot convert from 'int' to 'void*'
        return(donus);
}

sem

#36
Kusura bakmayın yarın sunumum var çıkmak zorundayım.
donus = &sarki.no; olarak deneyin. Aynı adrese referans çıkartacaktır. Dediğim gibi çıkmam gerek. Gece vaktim olursa girmeye çalışırım. Göstericiler çok hakim olduğum bir konu değil ama bu şekilde olacaktır. Bu arada menu fonksiyonun geri dönüşünü atadığınız değişkenin türüne de dikkat edin... Kolay gelsin... Görüşmek üzere...


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 11 Nisan 2010 - 20:06:30

@hedzuben;
   kafama takıldı tekrar baktım... void göstericileri * operatoru ile kullanamıyoruz. O nedenle yaptığımız işlemde en sonda bir hata olmaz fakat şöyle bir sorun olabilir... O da fonksiyonda değil de, fonkisyonun geri dönüşü alan değer de eğer void * olursa,  sadece adresine erişebiliyorsun.( * operatorü ile adresin içindeki bilgiye ulaşamadığın için). Geri döünüşü ona göre ayarlamaya da çalışabilirsin ya da fonksiyonu geri gönderme de değişiklik yapabilirsin, ya da bunları ana menuye yerleştirirsen (fonksiyon olarak değil yani ana menü içerisinde...) geri dönüş değeri sorununu da kaldırmış olabilirsin... Ama illa fonksiyon olsun ilerde de bu şekilde * bir şey lazım olur dersen, fonksiyon ile oynamanı öneriririm...

--->>> Ya da son olarak söyleyebileceğim, aynı şekilde void gösterici döndürüp, tekrar fonksiyonun geri dönüşü alan void göstericiyi, başka bir kontrol ile char ya da int türünden bir göstericiye atayarak içine de ulaşabilirsin...


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 11 Nisan 2010 - 20:31:34

Tekrar birlşetiriliyor nasılsa diye direk yanıtla diyorum, düzenle demedim. hedzuben şöyle * bir şey düşündüm ben... Sunumu saldım, aklıma takıldı bu diye... denedim bak şöyle bir yol izleyebilirsin...

#include <stdio.h>
int fun(int a);

void * BAKAYIM;

int main()
{
   int secim,donus;
   char *karakter;
   
   int * sayi;
   
   fprintf(stdout,"1 ya da 2 gir:");
   fscanf(stdin,"%d",&secim);
   donus = fun(secim);
   if(donus == 1)
   {
      karakter = BAKAYIM;
   }
   else
   {
      sayi = BAKAYIM;
   }
}


int fun(int a)
{
   void *donus;
   char abc;
   int def;
   
   if (a == 1)
   {
      donus = &def;
      BAKAYIM = donus;
      return 1;
   }
   else
   {
      donus = &abc;
      BAKAYIM = donus;
      return 2;
   }
}


-->>Kod hata vermedi. Çok dalgın yazdım ama bir yanlışlık varsa kodda beraber düzeltelim...
/*Kodun önemli bir işlevi yok. Sadece bir ya da iki girilmesine göre, fonksiyon dönüşünde karakter ya da tam sayi göstericisine atanıyor*/
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben


int main()
{
   int secim,donus;
   char *karakter;
   
   int * sayi;
   
   fprintf(stdout,"1 ya da 2 gir:");
   fscanf(stdin,"%d",&secim);
   donus = fun(secim);
   if(donus == 1)
   {
      karakter = BAKAYIM; //Error C2440: '=' : cannot convert from 'void *' to 'char *'

   }
   else
   {
      sayi = BAKAYIM; //Error C2440: '=' : cannot convert from 'void *' to 'int *'

   }
}

1- Özveriniz için teşekkürler. Ama benim için işinizi\ödevinizi geciktirmeyin. Projenin teslim tarihine daha var.
2- Yukarıda belirttiğim hatalar derleyiciden kaynaklanıyor olabilir. Ben Visual Studio 2008 de kodluyorum.
3- Biz şimdi hem int hem char[] değer döndürebilen bir fonksiyon tasarlamaya çalışıyoruz ya; onun yerine fonksiyonun tipini char tanımlasak sarki.no yu da stringe çevirip return etsek nasıl olur. 123 -> "123" gibi.

sem

Ben GCC ile derliyorum "error" değil "warning" bile almıyorum. Dediğiniz gibi derleyici farkından kaynaklı ya da C - C++ farkından kaynaklı olabilir. Visual Studio 2008'de C derleniyor muydu? Ben örnek olarak C kodları gönderiyorum da ondan sordum... Bir de daha sonra string i nasıl kullanacağız. Mesela "sarki.no" olarak geri döndürdük. Elimizde bir dizi adresi ile geri döndük dizinin içerisinde "sarki.no" yazıyor. Bunu integer olarak nasıl sokmayı planlıyorsunuz? Gerçekten düşünemediğim için soruyorum, şu an "şartlardan ötürü" diyeyim biraz beynimde impuls fonksiyonları yavaşladı diyebilirim =)... Bir de öneri olarak fonksiyon büyük bir parça olmadığı için bu fonksiyonu maine gömersek geri dönüş değeri sorunu kalmayacak. Bu da bir fikir... Gerçi güzel bir yöntemle sonuca bağlasak daha güzel olur =).
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben

Fonksiyonu main e gömemem çünkü o fonksiyonu, başka fonksiyonlar içinde kullanmak için yazdım. sarki.no değişkeninin içinde bir sayı var. VS2008 C kodlarını da derliyor.

sem

Anladım hedzuben... Bak şöyle bir şey olabilir işte biraz daha anlaşılır şekilde göndereyim... Daha iyi algoritmalar ya da yöntemler de vardır düşünürsek bulabiliriz bence... Az önce gönderdiğimin daha anlaşılır halini gönderiyorum... Az önce değişkenler abc, def falan başarısız olmuştu. Şunu inceler misin...


#include <stdio.h>
int fonk(int secim);
void * KONTROL;
struct muzik{
                char tur[20], tarz[20], baslik[20];
                int no; 
            }sarki;

int main()
{
   int secim;
   int *int_gosterici;
   char * char_gosterici;
   int donus;
   
   fprintf(stdout,"Geri donus degeri tam sayi istiyorsanız 1'e, Karakter dizisi icin 2'ye basin"); 
   fscanf(stdin,"%d",&secim);
   donus = fonk(secim);
   if(donus == 1)
   {
      int_gosterici = KONTROL;
      fprintf(stdout,"int olarak dondu...\n");
      //buraya int dönerse olan kodlar yazılacak
   }
   else
   {
      char_gosterici = KONTROL;
      fprintf(stdout,"char[] olarak dondu...\n");
      //buraya char[] dönerse olan kodlar yazılacak
   }
   
}

int fonk(int secim)
{
   void *tursuz;
   
   if(secim == 1)
   {
      tursuz = &sarki.no;
      KONTROL = tursuz;
      return 1;           
   }
   if(secim == 2)
   {
      tursuz = &sarki.tur;
      KONTROL = tursuz;
      return 2;
   }
   else
   {
      fprintf(stdout,"\n\nYanlis secim...Ana menu icin bir tusa basin...\n");
      main();
   }
}
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben

Yine benzer hatalar aldım :/
Şu an itoa diye bir fonksiyonla çevirmeye çalışıyorum. Belki o şekilde çözülür.

sem

Derleyemiyorsanız sadece kodlara bakın isterseniz... Çünkü ben uyarı da almıyorum... Gidiş yolu olarak bakabilirsiniz...  Kolay gelsin size... Görüşmek üzere, iyi geceler...
iota'ya bırakıp atoi ile geri alacaksınız sonra... mantıklı aynen... olursa en kısa yol o olacaktır...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hedzuben

Şarkıcı, sanatçı, albüm başlığı gibi bilgileri tutan, alfabetik ve sayısal sıralama yapan programın kodları aşağıdadır.
Programın, windows media player kitaplığına benzer bir işlevi vardır.
sem0900 ' un da katkılarıyla programı bu aşamaya getirdim. Neredeyse bitti. Sizden programdaki hataları bulmanızı isteyeceğim. Ben, "no ya göre sil" bölümünde bir hata buldum -örneğin 4 kayıt varken 1 numaralı kaydı sil dediğinizde tüm kayıtları siliyor- Şimdilik o hata üzerinde çalışıyorum. Yalnızca hatalara değil, algoritmaya da dikkat etmenizi rica ediyorum. Çünkü; "şunu böyle yapsan daha pratik olurdu" şeklindeki tavsiyelerinizi de dikkate alacağım.

Program, Visual Studio 2008' de kodlanmıştır.


#include "stdafx.h"
#include "ctype.h"
#include "conio.h"
#include <stdlib.h>
#include "stdio.h"
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

char menu();
void ekle ();
void sil();
void listele ();
void alfabetik ();
void ara ();
void aktar(int);

struct muzik
{
char baslik[50],sanatci[50],album[50],tarz[50];
int no;
} sarki;

FILE *fp,*fp2,*fp3;

char menu (char menu[])
{
    system("cls");
cout<<menu<<" MENUSU\n";
cout<<"1- Parca Basligina Gore\n";
cout<<"2- Sanatci Ismine Gore\n";
cout<<"3- Albume Gore\n";
cout<<"4- Tarza Gore\n";
cout<<"5- Numaraya Gore\n";
return(_getch());
}

void ekle ()
{
int sayac=0;
fp=fopen("mk.dat","a+");
do
{
fseek(fp,0L,SEEK_SET);
sayac=0;
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
sayac++;
}
cout<<"Parca Basligi : ";
gets_s(sarki.baslik);
cout<<"Sanatci : ";
gets_s(sarki.sanatci);
cout<<"Album : ";
gets_s(sarki.album);
cout<<"Tarz : ";
gets_s(sarki.tarz);
        sarki.no=sayac;
fseek(fp,0L,SEEK_END);
fwrite(&sarki,sizeof(struct muzik),1,fp);
cout<<"Devam edilsin mi? [e/h]\n";
} while (toupper(_getch())=='E');
fclose(fp);
}

void aktar(int a)
{
int sayac=0;
fp2=fopen("mk.dat","a+");
fp3=fopen("mk2.dat","w+");
fseek(fp2,0L,SEEK_SET);
fseek(fp3,0L,SEEK_SET);
fseek(fp,0L,SEEK_SET);
fread(&sarki,sizeof(struct muzik),1,fp2);
while(!feof(fp2))
{
if (sarki.no!=a)
{
sarki.no-=sayac;
fwrite(&sarki,sizeof(struct muzik),1,fp3);
}
else
{
sayac++;
}
fread(&sarki,sizeof(struct muzik),1,fp2);
}
fclose(fp2);
fclose(fp3);
fclose(fp);
remove("mk.dat");
rename("mk2.dat","mk.dat");
fp=fopen("mk.dat","a+");
}

void sil()
{
char girdi[50],sanos[50];
int sanot;
    fp=fopen("mk.dat","a+");
fseek(fp,0L,SEEK_SET);
switch (menu("SIL"))
{
case '1':
{
system("cls");
gets_s(girdi);
fread(&sarki,sizeof(struct muzik),1,fp);
while (!feof(fp))
{
if (!_stricmp(sarki.baslik,girdi))
aktar(sarki.no);
fread(&sarki,sizeof(struct muzik),1,fp);
}
}
break;
case '2':
{
system("cls");
gets_s(girdi);
fread(&sarki,sizeof(struct muzik),1,fp);
while (!feof(fp))
{
if (!_stricmp(sarki.sanatci,girdi))
aktar(sarki.no);
fread(&sarki,sizeof(struct muzik),1,fp);
}
}
break;
case '3':
{
system("cls");
gets_s(girdi);
fread(&sarki,sizeof(struct muzik),1,fp);
while (!feof(fp))
{
if (!_stricmp(sarki.album,girdi))
aktar(sarki.no);
fread(&sarki,sizeof(struct muzik),1,fp);
}
}
break;
case '4':
{
system("cls");
gets_s(girdi);
fread(&sarki,sizeof(struct muzik),1,fp);
while (!feof(fp))
{
if (!_stricmp(sarki.tarz,girdi))
aktar(sarki.no);
fread(&sarki,sizeof(struct muzik),1,fp);
}
}
break;
case '5':
{
system("cls");
gets_s(girdi);
fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
sanot=sarki.no;
_itoa_s(sarki.no,sanos,10);
if (!_stricmp(sanos,girdi))
{
aktar(sanot);
}
}
}
}
fclose(fp);
system("pause");
}

void listele ()
{
int sayac=0;
struct muzik *tampon,temp;
fp=fopen("mk.dat","a+");
fseek(fp,0L,SEEK_SET);
switch (menu("SIRALA"))
{
case '1':
{
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
sayac++;
}
tampon=(struct muzik *) malloc(sizeof(struct muzik)*sayac);
fseek(fp,0L,SEEK_SET);
int i=0;
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
tampon[i]=sarki;
fread(&sarki,sizeof(struct muzik),1,fp);
i++;
}
fseek(fp,0L,SEEK_SET);
for (i=1; i<sayac; i++)
{
for (int j=0; j<sayac-i; j++)
{
if(_stricmp(tampon[j+1].baslik,tampon[j].baslik)<0)
{
temp=tampon[j+1];
tampon[j+1]=tampon[j];
tampon[j]=temp;
}
}
}
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
for (i=0; i<sayac; i++)
printf("%-17s %-17s %-17s %-17s %d\n",tampon[i].baslik,tampon[i].sanatci,tampon[i].album,tampon[i].tarz,tampon[i].no);
}break;
case '2':
{
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
sayac++;
}
tampon=(struct muzik *) malloc(sizeof(struct muzik)*sayac);
fseek(fp,0L,SEEK_SET);
int i=0;
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
tampon[i]=sarki;
    fread(&sarki,sizeof(struct muzik),1,fp);
i++;
}
fseek(fp,0L,SEEK_SET);
for (i=1; i<sayac; i++)
{
for (int j=0; j<sayac-i; j++)
{
if(_stricmp(tampon[j+1].sanatci,tampon[j].sanatci)<0)
{
temp=tampon[j+1];
tampon[j+1]=tampon[j];
tampon[j]=temp;
}
}
}
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
for (i=0; i<sayac; i++)
printf("%-17s %-17s %-17s %-17s %d\n",tampon[i].baslik,tampon[i].sanatci,tampon[i].album,tampon[i].tarz,tampon[i].no);
}break;
case '3':
{
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
sayac++;
}
tampon=(struct muzik *) malloc(sizeof(struct muzik)*sayac);
fseek(fp,0L,SEEK_SET);
int i=0;
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
tampon[i]=sarki;
    fread(&sarki,sizeof(struct muzik),1,fp);
i++;
}
fseek(fp,0L,SEEK_SET);
for (i=1; i<sayac; i++)
{
for (int j=0; j<sayac-i; j++)
{
if(_stricmp(tampon[j+1].album,tampon[j].album)<0)
{
temp=tampon[j+1];
tampon[j+1]=tampon[j];
tampon[j]=temp;
}
}
}
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
for (i=0; i<sayac; i++)
printf("%-17s %-17s %-17s %-17s %d\n",tampon[i].baslik,tampon[i].sanatci,tampon[i].album,tampon[i].tarz,tampon[i].no);
}break;
case '4':
{
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
sayac++;
}
tampon=(struct muzik *) malloc(sizeof(struct muzik)*sayac);
fseek(fp,0L,SEEK_SET);
int i=0;
fread(&sarki,sizeof(struct muzik),1,fp);
while(!feof(fp))
{
tampon[i]=sarki;
    fread(&sarki,sizeof(struct muzik),1,fp);
i++;
}
fseek(fp,0L,SEEK_SET);
for (i=1; i<sayac; i++)
{
for (int j=0; j<sayac-i; j++)
{
if(_stricmp(tampon[j+1].album,tampon[j].album)<0)
{
temp=tampon[j+1];
tampon[j+1]=tampon[j];
tampon[j]=temp;
}
}
}
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
for (i=0; i<sayac; i++)
printf("%-17s %-17s %-17s %-17s %d\n",tampon[i].baslik,tampon[i].sanatci,tampon[i].album,tampon[i].tarz,tampon[i].no);
}break;
case '5':
{
fseek(fp,0L,SEEK_SET);
fread(&sarki,sizeof(struct muzik),1,fp);
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
while (!feof(fp))
{
printf("%-17s %-17s %-17s %-17s %d\n",sarki.baslik,sarki.sanatci,sarki.album,sarki.tarz,sarki.no);
fread(&sarki,sizeof(struct muzik),1,fp);
}
}break;
}
fclose(fp);
system("pause");
}

void ara ()
{
fp=fopen("mk.dat","a+");
char girdi[50],sanos[50];
switch (menu("ARA"))
{
case '1':
{
system("cls");
gets_s(girdi);
fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
if (!_stricmp(sarki.baslik,girdi))
{
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
printf("%-17s %-17s %-17s %-17s %d\n",sarki.baslik,sarki.sanatci,sarki.album,sarki.tarz,sarki.no);
system("pause");
return;
}
}
}
break;
case '2':
{
system("cls");
gets_s(girdi);
fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
if (!_stricmp(sarki.sanatci,girdi))
{
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
printf("%-17s %-17s %-17s %-17s %d\n",sarki.baslik,sarki.sanatci,sarki.album,sarki.tarz,sarki.no);
system("pause");
return;
}
}
}
break;
case '3':
{
system("cls");
gets_s(girdi);
fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
if (!_stricmp(sarki.album,girdi))
{
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
printf("%-17s %-17s %-17s %-17s %d\n",sarki.baslik,sarki.sanatci,sarki.album,sarki.tarz,sarki.no);
system("pause");
return;
}
}
}
break;
case '4':
{
system("cls");
gets_s(girdi);
fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
if (!_stricmp(sarki.tarz,girdi))
{
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
printf("%-17s %-17s %-17s %-17s %d\n",sarki.baslik,sarki.sanatci,sarki.album,sarki.tarz,sarki.no);
system("pause");
return;
}
}
}
break;
case '5':
{
system("cls");
gets_s(girdi);
//fseek(fp,0L,SEEK_SET);
while (!feof(fp))
{
fread(&sarki,sizeof(struct muzik),1,fp);
_itoa_s(sarki.no,sanos,10);
if (!_stricmp(sanos,girdi))
{
cout<<"BASLIK            SANATCI           ALBUM             TARZ              NO\n";
printf("%-17s %-17s %-17s %-17s %d\n",sarki.baslik,sarki.sanatci,sarki.album,sarki.tarz,sarki.no);
system("pause");
return;
}
}
}
}
cout<<"Kayit Bulunamadi!\n";
fclose(fp);
system("pause");
}

int _tmain(int argc, _TCHAR* ar3gv[])
{
for(;;)
{
system("cls");
printf("1-PARCA EKLE\n");
printf("2-PARCA SIL\n");
printf("3-LISTELE\n");
printf("4-ARA\n");
printf("5-CIKIS\n");
switch(_getch())
{
case '1':ekle();break;
    case '2':sil();break;
case '3':listele();break;
case '4':ara();break;
case '5':exit(0);break;
case '6':remove("mk.dat");
}
}
return 0;
}

sem

     Bir yardımım dokunduysa, hoşuma gider gerçekten. Derlemeyi denedim programı, stdafx.h bulunamadı ben de... Derleyecilerin kütüphane farklılığından sorun oluyor sanırım. Dev-C++ ile denedim ben... Eline sağlık, çoğunu halletmişsin projenin, nerdeyse bitmiş hatta anladığım kadarıyla...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

ozdemir08

Dostum istersen onun nedenini açıklayayım. Olimpiyatlara çalışırken çok fazla kod yazdığımdan dolayı bu tip şeyler zaman zaman benim de başıma geliyor. Şimdi açıklama yapayım.

%s ile string okuduğun zaman boşluk görene kadar okur. Yani Burak Kut yazdığında sadece Burak kısmını okur. Daha sonra senin kodunda sanatçı ismini bir daha %s ile istiyorsun. Bu durumda C otomatik olarak Kut kısmını okur. Bu nedenden dolayı o kısmı atlar.

Eğer tam emin olamadıysan ya da kafana tam yatmadıysa
scanf("%s",sarki.sanatci); bu satırın altına
printf("%s",sarki.sanatci);

diye yaz görürsün.
Eğer bu sorunu nasıl halledeceğini düşünüyorsan bekle beni
ancak Cumartesi bakabilirim.

Kolay gelsin...

eribol

Herşey iyi güzelde biz nasıl deneyeceğiz?

hedzuben

Alıntı yapılan: ozdemir08 - 18 Nisan 2010 - 22:40:19
Dostum istersen onun nedenini açıklayayım. Olimpiyatlara çalışırken çok fazla kod yazdığımdan dolayı bu tip şeyler zaman zaman benim de başıma geliyor. Şimdi açıklama yapayım.

%s ile string okuduğun zaman boşluk görene kadar okur. Yani Burak Kut yazdığında sadece Burak kısmını okur. Daha sonra senin kodunda sanatçı ismini bir daha %s ile istiyorsun. Bu durumda C otomatik olarak Kut kısmını okur. Bu nedenden dolayı o kısmı atlar.

Eğer tam emin olamadıysan ya da kafana tam yatmadıysa
scanf("%s",sarki.sanatci); bu satırın altına
printf("%s",sarki.sanatci);

diye yaz görürsün.
Eğer bu sorunu nasıl halledeceğini düşünüyorsan bekle beni
ancak Cumartesi bakabilirim.

Kolay gelsin...

scanf' in boşluktan sonrasını almadığını öğrenmiştim. Onun yerine gets kullanarak sorunu çözdüm

Dev C++ de derleyecek arkadaşlar main fonksiyonunu dev C++ deki main fonksiyonuna benzetsin ve stdafix satırını silsinler.

sem

#48
-->>Kafam karıştı. @ozdemir08...  scanf, fscanf-->> %s kullanımında oluyor bu. Çözüm olarak gets ya da türevleri kullanmak olabilir en basitinden fakat kodun içerisinde scanf göremedim ben... Ya aşırı uykum geldi ya da başka * bir şey...  Merakla bekliyorum ben de çözümünü ozdemir08. Muhtemelen yeni * bir şeyler öğreneceğim tekrar bu site sayesinde... Ama gene de kafam karışık =)

@hedzuben, eribol iyi bir noktaya değinmiş? Deneme kısmı için bir çözümün var mı?

NOT:  Ben bunları yazarken sen yukardakileri demişsin ama Ubuntu kullananlar nasıl yapacak =)=)

NOT2:main fonksiyonu sanırım derleyeciden derleyiciye değişmiyor. C++'da mı farklılık var gene acaba. C için
"int main()" şeklinde ya da aynı şekilde komut satırı argümanlarının parametreleri giriliyor. C++'da farklı mıdır bu durum? Çünkü int main haline getirip, stdfix satırını silince, yine derlenmiyor, hata veriyor...
-->>   _itoa_s(), gets_s fonksiyonları ve _TCHAR türünde hata veriyor...

Öneri: Windows kullananlar için çalıştırılabilir dosyayı paylaş istersen, hiç derleyicisi olmayanlar ama deneme süresince yardımcı olmak isteyenler de yardım edebilir...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

heartsmagic

Artık başlığı da değiştirsek :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.