widget menunggu '\ n' sebelum mendapatkan masukan ke buffer [duplikat]

Jan 02 2021

Saya mencoba menggunakan widget dari stdin dan mulai mengumpulkan data dari layar hanya setelah saya mengetik '\ n'. sampai '\ n' macet.

catatan: Saya tidak memiliki scanf dalam kode saya

bagian yang relevan dari kode:

while (reconnect_flag)
    {
        printf("%s\n", RECONNECT_MENU);
        char Input[2] = "";
        fgets(Input, 2, stdin);
    }

Jawaban

JonathanLeffler Jan 03 2021 at 22:43

Karena fgets()dimaksudkan untuk membaca satu baris data, hingga dan termasuk baris baru pertama (atau ke EOF), ia berperilaku sebagaimana mestinya.

Selain itu, kecuali Anda melakukan sesuatu yang menarik dengan pengaturan terminal, terminal tidak akan mengirimkan konten baris data ke program yang dibaca dari terminal sampai baris baru dibuat. Lihat input terminal Canonical vs non-canonical untuk informasi lebih lanjut dari perspektif POSIX (Unix). Jadi mencoba membaca satu karakter melalui fgets(Input, 2, stdin)tidak akan menerima masukan apa pun hingga baris baru dimasukkan.

Anda harus bekerja dengan API khusus platform jika Anda menginginkan masukan segera setelah tersedia. Itu berarti apa yang Anda lakukan di Windows akan berbeda dari apa yang Anda lakukan di sistem berbasis POSIX - berbagai varian Unix, termasuk Linux. Bahkan pada sistem berbasis POSIX, Anda mungkin menggunakan cursesperpustakaan atau Anda mungkin menggunakan panggilan sistem tingkat yang lebih rendah, dan ada beberapa cara untuk melakukannya.