fgets attend '\ n' avant d'obtenir une entrée dans le tampon [dupliquer]
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
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 curses
bibliothèque ou vous pouvez utiliser des appels système de niveau inférieur, et il existe plusieurs façons de le faire.