fgets wartet auf '\ n', bevor es in den Puffer eingegeben wird [Duplikat]
Ich versuche, fgets von stdin zu verwenden, und es beginnt erst, Daten vom Bildschirm zu sammeln, nachdem ich '\ n' eingegeben habe. bis das '\ n' steckt es fest.
Hinweis: Ich habe keinen ScanF in meinem Code
der relevante Teil des Codes:
while (reconnect_flag)
{
printf("%s\n", RECONNECT_MENU);
char Input[2] = "";
fgets(Input, 2, stdin);
}
Antworten
Da fgets()eine Datenzeile bis einschließlich der ersten neuen Zeile (oder bis EOF) gelesen werden soll, verhält sie sich wie beabsichtigt.
Wenn Sie mit den Terminaleinstellungen nichts Besonderes tun, sendet das Terminal den Inhalt der Datenzeile erst dann an die vom Terminal gelesenen Programme, wenn eine neue Zeile erreicht wird. Weitere Informationen aus POSIX (Unix) -Perspektive finden Sie unter Canonical vs non-Canonical Terminal Input . fgets(Input, 2, stdin)
Wenn Sie also versuchen, ein Zeichen über zu lesen, erhalten Sie keine Eingabe, bis eine neue Zeile eingegeben wird.
Sie müssen mit plattformspezifischen APIs arbeiten, wenn Sie Eingaben wünschen, sobald diese verfügbar sind. Das bedeutet, dass sich das, was Sie unter Windows tun, von dem unterscheidet, was Sie auf POSIX-basierten Systemen tun - den verschiedenen Unix-Varianten, einschließlich Linux. Selbst auf POSIX-basierten Systemen können Sie die curses
Bibliothek oder Systemaufrufe auf niedrigerer Ebene verwenden, und es gibt mehrere Möglichkeiten, dies zu tun.