queue segmentation fault

Başlatan janparey, 12 Nisan 2012 - 17:11:01

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

janparey

Arkadaşlar queue üzerinde çeşitli işlemler yapan menu-driven bir program yazmam istendi zaten kütüphanlerde hazır fonksiyonlar var fakat programımda 2 adet sorun var.İlki E seçeneğini seçtiğimde segmentetion fault hatası alıyorum.İkincisi switch case default mesajını her seferinde bana gösteriyor.Dosyayı buradan indirebilirsiniz
Note: Gerekli bütün kütüphaneler .tar dosyası içinde var. Programım "source-code.c"  dosyası .

iskn90

segfault aldığına göre muhtemelen memory'de olmayan birşeye erişmeye çalışıyosundur. ör: bir pointer'ı malloc etmeden kullanmaya çalışman yada olmayan bir .txt dosyasını açmaya çalışmak gibi. Kullandığın pointer'ları kontrol et derim
Tell me and I'll forget,
Show me and I may remember,
Involve me (I do) and I'll understand (I learn)

janparey

Teşekkürler peki switch case meselesi için ne diyeceksiniz?Mesela şu kodda her seferinde case deki işlemi gerçekleştirdikten sonra wrong input yazıyor.
#include<stdio.h>
void main(void){
char choice;
while(choice!='H'){
    printf("Please select :");
    scanf("%c",&choice);
    switch(choice){
        case 'A':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'B':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'C':
    printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'D':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'E':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'F':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'G':
      printf("'%c' secenegini sectiniz.",choice);
        break;
    case 'H':
       printf("'%c' secenegini sectiniz.",choice);
    break;
    default:
        printf("Wrong input please retype!\n\n");
        break;
    }
    }
}

sem

A yazıp enter'a basınca iki karakter girmiş oluyoruz.  İlk karakter için yani A için "'A' secenegini sectiniz." yazısı geliyor. Worng input... yazısının yazılmasını sağlayan yani default case'ine yönlenen karakter ise A 'nın kabul olması için bastığımız enter karakteri. Çünkü bir fscanf ile bir karakter okuyorsunuz ama farkında olmadan iki karakter giriyorsunuz (ikinci karakter '\n' yani enter). Bu durumda stdin tamponu dolu olduğunu için kullanıcının giriş yapması beklenmeden tamponda hazır olan enter karakteri okunuyor ve bu da case arasında olmadığı için default'a yönlendiriyor.

http://forum.ubuntu-tr.net/index.php?topic=17803.msg215154#msg215154

Çalışan kod yani tamponun boşlatılmış hali (scanf'ten ssonraki yeni eklenen bir satıra dikkat edin, sorunun çözümü bu satır.);


#include<stdio.h>
void main(void){
char choice;
while(choice!='H'){
    printf("Please select :");
    scanf("%c",&choice);
            while (getchar() != '\n');//stdin tamponu bosaltiliyor...
    switch(choice){
        case 'A':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'B':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'C':
    printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'D':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'E':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'F':
        printf("'%c' secenegini sectiniz.",choice);
    break;
    case 'G':
      printf("'%c' secenegini sectiniz.",choice);
        break;
    case 'H':
       printf("'%c' secenegini sectiniz.",choice);
    break;
    default:
        printf("Wrong input please retype!\n\n");
        break;
    }
    }
}


".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?

janparey

#4
Semetey bey çok güzel bir açıklama yapmışsınız yardımınız için sonsuz teşekkürler.

sem

Rica ederim ve iyi çalışmalar dilerim.

Başlıkta çözülmesi gereken sorun kaldı mı acaba yoksa etiketlendikten sonra kilitlenebilir 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?

if

Konu sahibinin son iletisine binaen konuyu kilitliyorum.