我正在使用类似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
你会怎么做?
答案 0 :(得分:3)
问题是puts()写入字符串并用换行符替换尾部空值,这会产生一个新行。
答案是使用fputs()。有些令人惊讶的是,fputs()与puts()的作用不同,而是输出没有尾部换行符的字符串。如此。
fputs("cofre>", stdout);
有些人会建议你使用printf(),但这是一个错误。当你使用fgets()时,你应该将它与fputs()配对。好处是您明确使用标准输入和输出,因此您将能够从脚本中驱动REPL。
请注意,在某些实现中,fgets()和fputs()可能会被缓冲,而这不是您想要的。在某些情况下,您可能需要使用低级I / O,例如cputs / cgets()。这些都是非标准的。
答案 1 :(得分:2)
puts() writes the string s and a trailing newline to stdout.
使用
printf("cofre>");
答案 2 :(得分:2)
您可以使用printf
代替puts
。