Saya sedang memulai dalam bahasa C. Saya menggunakan eclipse (juno) sebagai IDE saya dan menginstal plugin CDT. Saya juga telah membongkar mingw64 (GCC Compiler). Saya menulis program yang sangat sederhana untuk melihat apakah program ini bekerja. Ini adalah kode saya:
#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;
}
Masalahnya adalah bahwa buffer output diisi dengan nilai string dari printf
pertama tetapi tidak mengeluarkannya ke konsol. Saya harus memasukkan angka, dan baru kemudian buffer menuangkan semua data ke konsol sehingga saya melihat konsol seperti ini:
1
Hello, please enter your age:
Your age is 1
bukan seperti yang diharapkan:
Hello, please enter your age:
1
Your age is 1
Sekarang, saya menemukan bahwa saya dapat menggunakan fflush(stdout)
setelah
printf` pertama tetapi saya tidak berpikir bahwa solusi ini elegan dan bahkan perlu. Adakah ide bagaimana saya bisa mengatasi hal ini?
EDIT - karena saya sedang belajar ini di universitas saya, saya tidak bisa menggunakan apapun yang tidak dipelajari di mata kuliah, jadi saya hanya bisa hanya menggunakan printf
dan scanf
NEW EDIT - Saya pikir saya telah menemukan penjelasan untuk hal ini. Seperti yang saya katakan, saya mengeluarkan output ke tampilan konsol di dalam Eclipse. Hal yang aneh adalah jika saya mengkompilasi dan menjalankan program dari baris perintah Windows, saya mendapatkan hasil yang diinginkan. Oleh karena itu, saya pikir eclipse sebenarnya menulis output ke file dan menampilkannya di jendela konsol. Bagaimana saya bisa memaksa eclipse untuk membuka jendela baris perintah yang sebenarnya dalam konfigurasi yang saya jalankan?
Output disangga.
stdout adalah line-buffered secara default, yang berarti bahwa '\n' seharusnya menyiram buffer. Mengapa hal itu tidak terjadi dalam kasus Anda? Entahlah. Perlu info lebih lanjut tentang aplikasi/lingkungan Anda.
Namun, Anda dapat mengontrol buffering dengan setvbuf():
setvbuf(stdout, NULL, _IOLBF, 0);
Ini akan memaksa stdout menjadi line-buffer.
setvbuf(stdout, NULL, _IONBF, 0);
Ini akan memaksa stdout menjadi unbuffered, sehingga anda tidak perlu menggunakan fflush(). Perhatikan bahwa hal ini akan sangat mempengaruhi kinerja aplikasi jika Anda memiliki banyak cetakan.