gpt4 book ai didi

C++ 交互式命令行提示,无需等待换行符

转载 作者:行者123 更新时间:2023-11-30 04:48:33 26 4
gpt4 key购买 nike

有没有办法在看到换行符之前处理命令行输入?我正在考虑制作一个支持自动完成的程序(例如搜索引擎或 iOS 键盘中的程序)。

更具体地说,我的程序会在启动时提示用户输入,对于每个字符输入,我想输出一些BEFORE换行符(或EOF) 被输入。

下面的代码片段是我试过的:

int main(){
char ch;
while ( (ch = cin.get()) != cin.eof() )
{
cout << ch << flush;
}
}

预期:对于每个字符输入,输出该字符。

实际:在程序看到 eof 之前不输出任何内容。

最佳答案

在类 Unix 系统中,您可以通过将终端更改为非规范 输入模式来实现此目的。终端支持规范输入,收集整行进行编辑,直到行尾字符或按下 Ctrl-D。结果,应用程序经常在 read() 系统调用中看到整行。另一方面,非规范输入没有行缓冲;输入的字符在输入后立即可供程序使用。

这是一个 Linux C/C++ 示例,说明如何以编程方式设置 -icanon 标志(非规范)。

#include <iostream>
#include <termios.h>
#include <unistd.h>
int main() {
struct termios old_tio, new_tio;
tcgetattr(STDIN_FILENO, &old_tio);
new_tio = old_tio;
new_tio.c_lflag &= (~ICANON);
tcsetattr(STDIN_FILENO, TCSANOW, &new_tio);
char c;
while (fread(&c, 1, 1, stdin))
std::cout << c << std::endl;
return 0;
}

关于C++ 交互式命令行提示,无需等待换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com