Я следую учебному пособию «Создай свой собственный Лисп», чтобы научить себя C, и натолкнулся на странное поведение, связанное с fgets. Вот ссылка на главу, над которой я работаю: http://www.buildyourownlisp.com/chapter4_interactive_prompt#an_interactive_prompt
Код является простой основой для того, что в конечном итоге будет REPL. Он просто печатает некоторую информацию, а затем запускает al oop, который получает и печатает пользовательский ввод.
#include <stdio.h>
static char input[2048];
int main(int argc, char** argv) {
puts("Brenlisp Version 0.0.0.0.1");
puts("Press Ctrl+c to Exit\n");
while (1) {
fputs("brenlisp> ", stdout);
fgets(input, 2048, stdin);
fputs(input, stdout);
}
return 0;
}
Когда я запустил исполняемый файл с терминала Bash (Windows 10), программа запустилась но ничего не выводил на консоль и не принимал / печатал пользовательский ввод.
bschw@DESKTOP-92VUB1F MINGW64 ~/Projects/brenlisp
$ ./prompt.exe
Однако, когда я запускал исполняемый файл из CMD, приглашение выполнялось, как и ожидалось:
C:\Users\bschw\Projects\brenlisp>prompt.exe
BrenLisp Version 0.0.0.0.1
Press Ctrl+c to Exit
brenlisp> works fine
works fine
brenlisp> works fine
brenlisp> ^C
C:\Users\bschw\Projects\brenlisp>
Еще одна любопытная вещь: когда я запускаю программу на WSL, она не выводит строку «^ C» на консоль перед выходом:
bschw@DESKTOP-92VUB1F:/mnt/c/Users/bschw/Projects/brenlisp$ ./prompt.exe
BrenLisp Version 0.0.0.0.1
Press Ctrl+c to Exit
brenlisp> works
works
brenlisp> works
brenlisp> bschw@DESKTOP-92VUB1F:/mnt/c/Users/bschw/Projects/brenlisp$
Почему эти программы ведут себя по-разному в зависимости от из какой оболочки они запускаются? Как я мог заставить программу работать должным образом на Bash?