C diline yeni başlıyorum. IDE olarak eclipse (juno) kullanıyorum ve CDT eklentisini yükledim. Ayrıca mingw64 (GCC Derleyici) paketini de açtım. Çalışıp çalışmadığını görmek için çok basit bir program yazdım. Bu benim kodum:
#include <stdio.h>
int main()
{
int age;
printf("Hello, please enter your age:\n");
scanf("%d", &age);
printf("Your age is %d", age);
return 0;
}
Sorun şu ki, çıktı tamponu ilk printf
in dize değeriyle doluyor ancak konsola çıktı vermiyor. Bir sayı girmem gerekiyor ve ancak o zaman tampon tüm verileri konsola döküyor, böylece konsolda şöyle bir şey görüyorum:
1
Hello, please enter your age:
Your age is 1
beklenen şey yerine, yani:
Hello, please enter your age:
1
Your age is 1
Şimdi, ilk printf
ten sonra fflush(stdout)
kullanabileceğimi buldum, ancak bu çözümün zarif ve hatta gerekli olduğunu düşünmüyorum. Bunun üstesinden nasıl gelebileceğime dair bir fikriniz var mı?
EDIT - bunu üniversitemde öğrendiğim için, kursta öğrenilmeyen hiçbir şeyi kullanamıyorum, bu yüzden sadece printf
ve scanf
kullanabiliyorum
YENİ DÜZENLEME - Sanırım bunun için bir açıklama buldum. Dediğim gibi, Eclipse içindeki konsol görünümüne çıktı alıyorum. Garip olan şu ki, programı Windows'un komut satırından derleyip çalıştırırsam, istediğim sonucu alıyorum. Bu nedenle, eclipse'in aslında çıktıyı bir dosyaya yazdığını ve konsol penceresinde sunduğunu düşünüyorum. Eclipse'i çalıştırma konfigürasyonlarımda gerçek bir komut satırı penceresi açmaya nasıl zorlayabilirim?
Çıkış tamponlanmıştır.
stdout varsayılan olarak satır tamponludur, bu da '\n''in tamponu temizlemesi gerektiği anlamına gelir. Sizin durumunuzda bu neden gerçekleşmiyor? Bilmiyorum. Uygulamanız/ortamınız hakkında daha fazla bilgiye ihtiyacım var.
Ancak, setvbuf() ile tamponlamayı kontrol edebilirsiniz:
setvbuf(stdout, NULL, _IOLBF, 0);
Bu, stdout'u satır tamponlu olmaya zorlayacaktır.
setvbuf(stdout, NULL, _IONBF, 0);
Bu stdout'u tamponsuz olmaya zorlayacaktır, böylece fflush() kullanmanıza gerek kalmayacaktır. Çok sayıda çıktı almanız durumunda uygulama performansını ciddi şekilde etkileyeceğini unutmayın.