c++ - 从标准输入中读取特定数量的字符

标签 c++ file file-descriptor

你好

我正在编写一个充当服务器并能够通过终端与用户交互的程序。如果我从标准输入中读取,我最多需要 140 个字符。 如果用户输入超过 140 个字符,我只想取前 140 个字符并忽略其余字符。

我尝试类似下面的代码:

struct timeval timeout;
fd_set readings;
char buf[140];


while (1) {
    timeout.tv_sec = 15;
    timeout.tv_usec = 0;
    FD_ZERO(&readings);
    FD_SET(STDIN_FILENO,&readings);

    int rv = select(STDIN_FILENO+1,&readings,NULL,NULL,&timeout);
    if (rv<0) {
        cout << "ERROR select\n";
        exit(1);
    }
    if (rv==0) {
        cout << "Still Waiting...\n";
    }
    else {
        cout << "A key was pressed\n";
        if (FD_ISSET(STDIN_FILENO,&readings)) {
            int num = read(STDIN_FILENO,&buf,140);
            buf[num]='\0';
            cout << buf << endl;
        }
    }
}

问题是 - 当我输入超过 140 个字符时,会打印前 140 个字符,但 read() 会在下一次迭代中读取其余数据并打印出来。 我如何清除标准输入以便在下一次迭代中忽略其余数据?

谢谢!!

最佳答案

您可能会修改您的解决方案以使用 readsome() .

char c[140];
cin.readsome(&c[0], 140);

或者保留你所拥有的并使用ignore

关于c++ - 从标准输入中读取特定数量的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062054/

相关文章:

c++ - c 到 c++,在翻译中丢失

C++:使用运算符 = 调用多参数构造函数

c++ - 未初始化的值用法,使用sprintf或strcat时出错

java - 如何在构造函数中获取资源?

c# - 如何读取特定文件夹中的所有文件

c - 使用文件描述符打开读取文件

c - 查找进程 linux(C 代码)的打开文件描述符?

C++ MySQL 准备语句

ssl - 在 Rust 中通过 TLS 重定向 stdio

c - 学习 C 语言中文件的语法