如何解决如何使用键盘在终端输入中正确插入换行符'\ n'?
考虑以下C程序:
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF)
putchar(c);
return 0;
}
,并考虑以下内容作为所需输入:
LINE1
LINE2
如果我开始在终端窗口中输入输入内容,则按下Enter / return键后,到目前为止的输入内容将被打印到屏幕上。我不想发生。 (似乎按下Enter / return键后,终端会将键入的所有内容发送给程序)
我希望能够在终端中输入所有行,然后将输出全部显示在一个地方,而不是在我按每行末尾的回车键时打印输出。
是否可以在不将输入发送到应用程序的情况下插入换行符?
解决方法
大多数系统使用输入缓冲,即输入被缓冲,直到输入为换行符后才发送给应用程序。
AFAIK无法阻止输入为换行符时系统将缓冲的数据发送到应用程序。
因此,您需要在系统缓冲区系统之上实现自己的缓冲区系统。
类似的东西:
int main() {
int c;
size_t capacity = 64;
size_t write_index = 0;
char *buffer = malloc(capacity);
assert(buffer != NULL);
// Buffer input
while ((c = getchar()) != EOF)
{
if (write_index == capacity)
{
// Increase buffer
capacity = 2 * capacity;
char *tmp = realloc(buffer,capacity);
assert(tmp != NULL);
buffer = tmp;
}
buffer[write_index] = c;
++write_index;
}
// Process input
for (size_t i = 0; i < write_index; ++i)
{
putchar(buffer[i]);
}
free(buffer);
return 0;
}
然后所有输入将被缓冲,直到您输入EOF(即ctrl-d或ctrl-z),然后再进行处理。
,我希望能够在终端中输入所有行,然后 然后将输出全部放在一个地方,而不是将输出 我在每行末尾按Enter键后打印
我不确定我知道你想做什么。简短的回答是,可以。但是您想要的行为对我来说并不明确,因此至少对我而言很难说出如何做自己想做的事
您可以在循环内处理char c
,可以在读取时禁用ECHO,并且仅在需要时才可以写入,可以按照here if you are using Windows
在Unix及其衍生版本下,该模型有所不同,因为Linux / Unix / Mac没有控制台。您使用ioctl()
并操纵VMIN
和VTIME
参数
您正在使用什么平台?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。