Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > Karakter katar? okumada pr?blemler zinciri
Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
18.12.2006-19:24 #12694
Arkadaşlar, C ile yapılan bir console uygulamasında konsoldan bir karakter katarını boşlularla birlikte bir karakter dizisine nasıl yerleştirebiliriz? Ben bir türlü işin içinden çıkamadım. Size karşılaştığım problemleri kısaca anlatayım:

scanf("%s", str);
Burada girilen katardaki ilk boşlukta okuma bitiyor, sonra işlem yapılıyor. İlerleyen kısımdaki ilk scanf fonksiyonu da otomatik olarak boşluktan sonraki katarları yeni bir boşluk karakterine kadar alıyor. Bu da programın istenilmeyen bir şekilde devam etmesine neden oluyor

gets(str);
Bu da nedense o andan önce başka bir iş için bir giriş yapılmışsa, gets fonksiyonu çalışmadan program devam ediyor, tabi str'nin içi boş oluyor. Yani hiç bir işe yaramıyor (bence).

Dosyadan okuma ile ilgili sorunları çözdüm. fgets ile satırları okuyup, format işlemini daha sonra yaparak istediğim sonuşları elde edbiliyorum. Ama fscanf aynı scanf gibi problem yaratıyor.

Yok mudur bu işin önceden çözülmüş bir methodu?

Yorumlarınızı bekliyorum..





Let`s make this world a better place to live !

Yazar
avare


avatar
Istanbul
Kayıt: 09.10.2006
18.12.2006-21:41 #12707
Benim bildiğim kadarıyla gets ile scanf arasında uyumluluk açısından yapısal bir bozukluk var. Yanlış hatırlamıyorsam, scanf en son girilen enter yani (newline karakterini) buffer da bırakıyordu. Bir sonraki gets de onu okuduğu için okumamış sanıyorsun. Herneyse, bunun basit çözümü; eğer çok fazla bi zorunluluk yoksa yalnızca birini kullanman olabilir. Yoksa klavyenin buffer ını temizlemen gerekir, onun da nasıl yapıldığını bilmiyorum.biggrinbiggrinbiggrin





siteden ayr?ld?m








Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
18.12.2006-21:53 #12708
avare yazdi
 
Benim bildiğim kadarıyla gets ile scanf arasında uyumluluk açısından yapısal bir bozukluk var. Yanlış hatırlamıyorsam, scanf en son girilen enter yani (newline karakterini) buffer da bırakıyordu. Bir sonraki gets de onu okuduğu için okumamış sanıyorsun. Herneyse, bunun basit çözümü; eğer çok fazla bi zorunluluk yoksa yalnızca birini kullanman olabilir. Yoksa klavyenin buffer ını temizlemen gerekir, onun da nasıl yapıldığını bilmiyorum.biggrinbiggrinbiggrin

Ben de böyle düşünüyorum. Aslında kendim de bir input fonksiyonu yazmıştım ama neyse biraz daha uğraşayım belki birşey çıkar.





Let`s make this world a better place to live !

Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
18.12.2006-22:15 #12710
Problem hallolmuştur! dancing





Let`s make this world a better place to live !

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb