24 Aralık 2014 Çarşamba

C ' de gets() , fgets() Fonksiyonları Atlama Hatasının Çözümü

Bu akşam bir C programı oluştururken scanf kullanıp ardından gets veya fgets fonsiyonlarını kullanıp
 programı çalıştırdığımda gets ve fgets ile okumak istediğim karakter dizilerinin girilmesine izin verilmeden atlandığını farkettim.Öncelikle bu sorunun scanf(); ile gets(); veya fgets(); fonskiyonlarını birlikte kullanınca ortaya çıktığını belirtmeliyim.





Örnek(Çalışmayan Kod):
int main()
{
    char dizi[150];
    int sayi;
    printf("Sayi giriniz:");
    scanf("%d",&sayi);
    printf("%d \n",sayi);
    printf("Cumle giriniz:");
    gets(dizi);
    printf(dizi);
    return 0;
}

Biraz araştırma yapıp , bir kaç yöntem denedikten sonra en uygun yöntem olarak gets veya fgets fonksiyonlarını kullanmadan önce getchar(); kodunu kullanmak olduğuna karar kıldım. Bu sorunun kaynağı da scanf fonksiyonu olduğunu düşünüyorum.scanf kullanarak bir değer okuduktan sonra
program otomatik olarak alt satıra geçer , scanf den sonra gets , fgets fonksiyonu kullandığınızda ise o karakter dizisine '\n' karakteri gönderiyor. Bunu engellemek için fflush(stdin); fonksiyonunu kullananlar olmuş ama bu ne kadar sağlıklı bir çözüm bilmiyorum. gets(string); şeklindeki kullanım yerine scanf("%s",string); i tercih etmeyi düşünebilirsiniz fakat bu sefer de boşluk karakterinden sonraki kısmı okumuyor.Şu an benim için en iyi çözüm getchar(); dır.
Örnek Kullanım:
    char cumle[150]; 
    int sayi;
    printf("Sayi giriniz: ");
    scanf("%d",&sayi);
    printf("Cumlenizi giriniz: ");
    getchar();
    gets(cumle);
    //fgets(cumle,sizeof(cumle),stdin); isteğe bağlı olarak kullanılabilinir.
    printf(cumle);


0 yorum:

Yorum Gönder