fgets attend '\ n' avant d'obtenir une entrée dans le tampon [dupliquer]

Jan 02 2021

J'essaie d'utiliser fgets de stdin et il commence à collecter des données à partir de l'écran uniquement après avoir tapé '\ n'. jusqu'à ce que le '\ n' soit bloqué.

note: je n'ai pas de scanf dans mon code

la partie pertinente du code:

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

Réponses

JonathanLeffler Jan 03 2021 at 22:43

Comme il fgets()est destiné à lire une ligne de données, jusqu'à et y compris la première nouvelle ligne (ou EOF), il se comporte comme prévu.

De plus, à moins que vous ne fassiez quelque chose d'extraordinaire avec les paramètres du terminal, le terminal n'enverra pas le contenu de la ligne de données aux programmes lisant depuis le terminal jusqu'à ce qu'une nouvelle ligne soit frappée. Voir Entrée de terminal canonique vs non canonique pour plus d'informations du point de vue POSIX (Unix). Donc, essayer de lire un caractère via fgets(Input, 2, stdin)ne recevra aucune entrée jusqu'à ce qu'une nouvelle ligne soit entrée.

Vous devez travailler avec des API spécifiques à la plate-forme si vous souhaitez une entrée dès qu'elle est disponible. Cela signifie que ce que vous faites sous Windows sera différent de ce que vous faites sur les systèmes basés sur POSIX - les différentes versions d'Unix, y compris Linux. Même sur les systèmes basés sur POSIX, vous pouvez utiliser la cursesbibliothèque ou vous pouvez utiliser des appels système de niveau inférieur, et il existe plusieurs façons de le faire.