Сделать ответ в C, который выглядит хорошо

Я пишу небольшую программу с интерфейсом, похожим на Shell. Мой ui является:

void cli_ui(void){
    bool loop = true ;
    char response[CHARSIZE];
    while (loop) {
    puts("cofre>");
    fgets(response, CHARSIZE, stdin);
    ....
    }

}

Моя проблема с этим заключается в том, что ввод читается после приглашения:

cofre>
# input is expected here

Что я хочу это:

cofre> #input is expected here

Как бы вы это сделали?

3 ответа

Решение

Проблема в том, что put () записывает строку и заменяет завершающий ноль новой строкой, что приводит к новой строке.

Ответ заключается в использовании fputs (). Несколько удивительно, что fputs () не делает то же самое, что put (), но вместо этого выводит строку без завершающего символа новой строки. Так.

fputs("cofre>", stdout);

Некоторые люди предлагают вам использовать printf (), но это будет ошибкой. Когда вы используете fgets (), вы должны связать его с fputs (). Преимущество заключается в том, что вы явно используете стандартный ввод и вывод, так что вы сможете управлять своим REPL из сценария.

Помните, что в некоторых реализациях fgets () и fputs () могут быть буферизованы, а это не то, что вам нужно. В некоторых случаях вам может понадобиться использовать низкоуровневый ввод-вывод, такой как cputs / cgets (). Это нестандартные.

Ты можешь использовать printf вместо puts,

puts() writes the string s and a trailing newline to stdout.

использование

printf("cofre>");
Другие вопросы по тегам