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