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