我的程序应该让用户编辑文件的一行。用户编辑该行并按回车键将其发回。因此,我想打印即将被编辑的当前行,但将其打印在标准输入而不是标准输出上。
我不知道如何解决的唯一问题是如何预填充标准输入。我已经试过了:

char cprefill[] = {"You may edit this line"};
char cbuffer[100];
fprintf(stdin, cprefill);
fgets(cbuffer, 100, stdin);

这似乎是最简单的解决方案,但可能太简单了。 fprintf 不会向 stdin 打印任何内容。什么是正确的方法?

编辑:
c - 在 C 中预填充标准输入-LMLPHP

这就是它应该看起来的样子。请注意可以移动的光标。

最佳答案

首先你需要 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/

10-11 21:30