Gönderen Konu: goto yerine do while yaptım program eksik çalıştı  (Okunma sayısı 1386 defa)

Çevrimdışı gizemsayar

  • Üye
  • İleti: 1
    • Profili Görüntüle
goto yerine do while yaptım program eksik çalıştı
« : 28 May 2014, 13:21:07 Çrş »
merhabalar basit bir şifreleme programı gibi goto ile yazdık programı ama hocamız goto nun kullanılmadığını yani cok beğenilmeyen birşey olduğunu söyledi ve kodumu değiştirmemi söyledi. onun yerine 2 farklı kod yazdık biri hiçbirşey yapmıyor:) diğeri eksik çalısıyor yardımcı olana sonsuz teşekkürler  ;)



bu eksik çalışan
Kod: [Seç]
void dosyaYazSifre()
{
FILE *dosya;
dosya=fopen("C:\\Users\\gokhan\\Desktop\\My Shared Folder\\key.txt", "w");
Bliste *gecici;
Sayac *geciciSira;
int sifreNumarasi=1;
int a=0;
int b=1;
gecici=ilk;
do {
gecici=ilk;
while ((sifreNumarasi<kelimeIndis) && (gecici!=NULL)) {

a=0;
if (gecici->key==sifreNumarasi)
{
if (strcmp(gecici->kelime, "\n")==0)
{
fprintf(dosya,"%s","\n");
fflush(stdout);
sifreNumarasi++;
a=1;
}
if(a!=1)
{
fprintf(dosya,"%d ",gecici->key);
fflush(stdout);
sifreNumarasi++;
a=1;
}
}
else
{
if (gecici->sira.numara==sifreNumarasi)
{
if (strcmp(gecici->kelime, "\n")==0)
{
fprintf(dosya,"%s","\n");
fflush(stdout);
sifreNumarasi++;
a=1;
}
if(a!=1)
{
fprintf(dosya,"%d ",gecici->sira.numara);
fflush(stdout);
sifreNumarasi++;
a=1;
}
}
else if (gecici->sira.asagiLink!=NULL)
{
geciciSira=gecici->sira.asagiLink;
while ((geciciSira!=NULL)&&(a!=1))
{
if (geciciSira->numara==sifreNumarasi)
{
if (strcmp(gecici->kelime, "\n")==0)
{
fprintf(dosya,"%s","\n");
fflush(stdout);
sifreNumarasi++;
a=1;
}
else
{
fprintf(dosya,"%d ",geciciSira->numara);
fflush(stdout);
sifreNumarasi++;
a=1;
}
}
if(a!=1)
{
geciciSira=geciciSira->asagiLink;
}
}
}
}
if(a!=1){
gecici=gecici->sonraki;
}
}

if (sifreNumarasi<kelimeIndis)
{
sifreNumarasi++;

}
}

while(b==1);
printf("Kitap Sifrelendi .. \n");
fflush(stdout);
fclose(dosya);
}


bu hiç çalışmayan :(
Kod: [Seç]
void dosyaYazSifre() {
FILE *dosya;
dosya = fopen("C:\\Users\\gokhan\\Desktop\\My Shared Folder\\key.txt", "w");
Bliste *gecici;
Sayac *geciciSira;
int sifreNumarasi = 1;

gecici = ilk;
while ((sifreNumarasi < kelimeIndis) && (gecici != NULL)) {
if (gecici->key == sifreNumarasi) {
if (strcmp(gecici->kelime, "\n") == 0) {
fprintf(dosya, "%s", "\n");
fflush (stdout);
sifreNumarasi++;
//goto bastan;
gecici = ilk; // her donguye girmeden once bunu yapiyorsun diye bende yazdim.
continue; // dongunun basina donmesi icin.

/*
bastan dedigin etikete dondugunde, gecici=ilk; calisiyor,
ardindan da tekrar while dongusune giriyor.
bunun yerine once gecici = ilk; yap, ondan sonrada dongunun (while) basina gonder. continue.
*/
}
fprintf(dosya, "%d ", gecici->key);
fflush (stdout);
sifreNumarasi++;
gecici = ilk;
continue;
} else {
if (gecici->sira.numara == sifreNumarasi) {
if (strcmp(gecici->kelime, "\n") == 0) {
fprintf(dosya, "%s", "\n");
fflush (stdout);
sifreNumarasi++;
gecici = ilk;
continue;
}
fprintf(dosya, "%d ", gecici->sira.numara);
fflush (stdout);
sifreNumarasi++;
gecici = ilk;
continue;
} else if (gecici->sira.asagiLink != NULL) {
geciciSira = gecici->sira.asagiLink;
while (geciciSira != NULL) {
if (geciciSira->numara == sifreNumarasi) {
if (strcmp(gecici->kelime, "\n") == 0) {
fprintf(dosya, "%s", "\n");
fflush (stdout);
sifreNumarasi++;
gecici = ilk;
continue;
} else {
fprintf(dosya, "%d ", geciciSira->numara);
fflush (stdout);
sifreNumarasi++;
gecici = ilk;
continue;
}
}
geciciSira = geciciSira->asagiLink;
}
}
}
gecici = gecici->sonraki;
if (sifreNumarasi < kelimeIndis) {
sifreNumarasi++;
gecici = ilk;
continue;
}
}
printf("Kitap Sifrelendi .. \n");
fflush (stdout);
fclose(dosya);
}



bu çalışan goto program kısmı

Kod: [Seç]
void dosyaYazSifre()
{
    FILE *dosya;
    dosya=fopen("C:\\Users\\gokhan\\Desktop\\My Shared Folder\\key.txt", "w");
    Bliste *gecici;
    Sayac *geciciSira;
    int sifreNumarasi=1;
   bastan:
    gecici=ilk;
    while ((sifreNumarasi<kelimeIndis) && (gecici!=NULL)) {
        if (gecici->key==sifreNumarasi) {
            if (strcmp(gecici->kelime, "\n")==0) {
                fprintf(dosya,"%s","\n");
                fflush(stdout);
                sifreNumarasi++;
                goto bastan;
            }
            fprintf(dosya,"%d ",gecici->key);
            fflush(stdout);
            sifreNumarasi++;
            goto bastan;
        }
        else
        {
            if (gecici->sira.numara==sifreNumarasi) {
                if (strcmp(gecici->kelime, "\n")==0) {
                    fprintf(dosya,"%s","\n");
                    fflush(stdout);
                    sifreNumarasi++;
                    goto bastan;
                }
                fprintf(dosya,"%d ",gecici->sira.numara);
                fflush(stdout);
                sifreNumarasi++;
                goto bastan;
            }
            else if (gecici->sira.asagiLink!=NULL) {
                geciciSira=gecici->sira.asagiLink;
                while (geciciSira!=NULL) {
                    if (geciciSira->numara==sifreNumarasi) {
                        if (strcmp(gecici->kelime, "\n")==0) {
                            fprintf(dosya,"%s","\n");
                            fflush(stdout);
                            sifreNumarasi++;
                            goto bastan;
                        }
                        else
                        {
                            fprintf(dosya,"%d ",geciciSira->numara);
                            fflush(stdout);
                            sifreNumarasi++;
                            goto bastan;
                        }
                    }
                    geciciSira=geciciSira->asagiLink;
                }
            }
        }
        gecici=gecici->sonraki;
    }
    if (sifreNumarasi<kelimeIndis) {
        sifreNumarasi++;
        goto bastan;
    }
    printf("Kitap Sifrelendi .. \n");
    fflush(stdout);
    fclose(dosya);
}

void fileSize(char *path)
{
    long size;

    FILE *f = fopen(path, "rb");
    if (f)
    {
        fseek(f, 0, SEEK_END);
        size = ftell(f);
        printf("FILE SIZE : %ld\n",size);
        fflush(stdout);
        fclose(f);
    }
}

teşekkürler şimdiden  :)