fgets, arabelleğe girdi almadan önce "\ n" için bekler [kopya]

Jan 02 2021

Stdin'den fgets kullanmaya çalışıyorum ve sadece '\ n' yazdıktan sonra ekrandan veri toplamaya başlıyor. ta ki '\ n' sıkışana kadar.

not: Kodumda herhangi bir scanf yok

kodun ilgili kısmı:

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

Yanıtlar

JonathanLeffler Jan 03 2021 at 22:43

Bu yana fgets()bir veri satırını okumak için tasarlanmıştır istendiği gibi, ilk satır (veya EOF'a) kadar ve bu hareket etmektedir.

Ek olarak, terminal ayarlarında hoşunuza giden bir şey yapmazsanız, terminal veri satırının içeriğini bir satırsonu satırı vurulana kadar terminalden okuyan programlara göndermez. Bkz kurallı olmayan uç girişi vs kanonik POSIX (Unix) açısından daha fazla bilgi için bkz. Bu yüzden, üzerinden bir karakter okumaya çalışmak, fgets(Input, 2, stdin)bir satırsonu girilene kadar herhangi bir girdi almayacaktır.

Kullanılabilir olur olmaz giriş yapmak istiyorsanız platforma özel API'lerle çalışmanız gerekir. Bu, Windows'ta yaptığınız şeyin POSIX tabanlı sistemlerde yaptığınızdan farklı olacağı anlamına gelir - Linux dahil olmak üzere çeşitli Unix türleri. POSIX tabanlı sistemlerde bile, curseskitaplığı veya daha düşük seviyeli sistem çağrılarını kullanabilirsiniz ve bunu yapmanın birçok yolu vardır.