我的程序应该让用户编辑文件的一行。用户编辑该行并按回车键将其发回。因此,我想打印即将被编辑的当前行,但将其打印在标准输入而不是标准输出上。
我不知道如何解决的唯一问题是如何预填充标准输入。我已经试过了:
char cprefill[] = {"You may edit this line"};
char cbuffer[100];
fprintf(stdin, cprefill);
fgets(cbuffer, 100, stdin);
这似乎是最简单的解决方案,但可能太简单了。 fprintf 不会向 stdin 打印任何内容。什么是正确的方法?
编辑:
这就是它应该看起来的样子。请注意可以移动的光标。
最佳答案
首先你需要 libreadline 开发包。 (如果您的系统上还没有 libreadline
,您可能还需要它)
在 Debian/Ubuntu 上,这是 apt install libreadline-dev
(如果您还需要二进制文件,请加上 libreadline6
- 6
在您的平台上可能会有所不同)
然后你可以添加一个历史到 readline
,像这样
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
...
char cprefill[] = {"You may edit this line"};
add_history(cprefill);
char *buf = readline("Line: ");
printf("Edited line is %s\n", buf);
// free the line allocated by readline
free(buf);
用户被提示“行:”,并且必须执行向上箭头以获取和编辑历史记录,即
cprefill
行。请注意,您必须使用
-lreadline
编译/链接readline
打印作为参数给出的提示,然后等待用户交互,允许行编辑和箭头加载存储在历史中的行。然后必须释放
char *
返回的 readline
(因为该函数使用 malloc()
分配缓冲区)。关于c - 在 C 中预填充标准输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47414344/