在C中预填充标准输入

杜瓦尔

我的程序应该允许用户编辑文件的一行。用户编辑该行,然后按Enter将其发送回去。因此,我想打印将要编辑的当前行,但是有点在stdin而不是stdout上打印它。我不知道如何解决的唯一问题是如何预填充标准输入。我已经尝试过了:

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

这似乎是最简单的解决方案,但可能太简单而无法使用。fprintf不打印任何东西到stdin。正确的方法是什么?

编辑: 结果

这是应该的样子。请注意可以移动的光标。

e2-e4

首先,您需要libreadline开发人员软件包。libreadline如果系统上尚不可用,则可能还需要

在Debian / Ubuntu上apt install libreadline-devlibreadline6如果您还需要二进制文件,则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);

提示用户“行:”,并且必须UP ARROW获取和编辑历史记录(即cprefill行)。

请注意,您必须编译/链接 -lreadline

readline 打印作为参数给出的提示,然后等待用户交互,允许行编辑,并使用箭头加载历史记录中存储的行。

char *返回通过readline具有随后被释放(因为函数分配有缓冲malloc())。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章