2

我正在编写带有类似 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

你会怎么做?

4

3 回答 3

4

问题是 puts() 写入字符串并用换行符替换尾随的 null,这会产生一个新行。

答案是使用 fputs()。有点令人惊讶的是,fputs() 与 puts() 的作用不同,而是输出没有尾随换行符的字符串。所以。

fputs("cofre>", stdout);

有些人会建议你使用 printf(),但这是一个错误。当你使用 fgets() 时,你应该将它与 fputs() 配对。好处是您明确使用标准输入和输出,因此您将能够从脚本驱动您的 REPL。

请注意,在某些实现中 fgets() 和 fputs() 可能会被缓冲,这不是您想要的。在某些情况下,您可能需要使用低级 I/O,例如 cputs/cgets()。这些都是非标准的。

于 2014-03-14T09:12:50.960 回答
2
puts() writes the string s and a trailing newline to stdout.

利用

printf("cofre>");
于 2014-03-14T08:58:23.857 回答
2

您可以使用printf而不是puts.

于 2014-03-14T08:58:30.207 回答