c++ - 可以使用SPACE而不是ENTER来接受C++中的输入吗?

标签 c++ linux windows c++14

我正在编写一个用于操作符重载的非常简单的C++程序,但遇到了问题。我想使用空间来接受输入而不是输入。我基本上想使用运算符>>输入一个复数,但是问题是在输入虚部之前,我正在打印“)+ i(”,但是按Enter键时,光标会移至终端的下一行。我可以避免吗?
这就是输入正在执行的操作。

istream &operator>>(istream &i, Complex &num){
    cout << "(";
    i>>num.a;
    cout << ")+i(";
    i>>num.b;
    cout << ")" << endl;
    return i;
}
这就是输入的样子。
(-1
)+i(5
)
这就是我希望输入看起来像的样子。
(-1)+i(5)

最佳答案

之所以仅在输入后才将信息提供给std::cin,是因为默认情况下对标准输入进行了缓冲。将其设置为无缓冲可让您控制何时立即处理或何时缓冲输入。
这取决于平台,但在* nix系统中运行:

$ stty raw && stty echo


这使得输入(和输出)在保留回声的同时不加缓冲(这样您就可以看到您的输入)。
当读取整数时,程序现在将立即使用任何分隔符进行响应。
例:
int main() {
  while (std::cin) {
    int a, b;
    std::cout << "( ";
    std::cin >> a;
    std::cout << ") +i ( ";
    std::cin >> b;
    std::cout << ")= " << a << " + " << b << 'i' << "\r\n";
    // Note that we need to return cursor to leftmost ^ position
  }
}
跑:

g++ test.cpp && stty raw && stty echo && ./a.out


输出(输入=“1 2 3 4 5 6” :)
( 1 ) + i( 2 ) = 1 + 2i
( 3 ) + i( 4 ) = 3 + 4i
( 5 ) + i( 6 ) = 5 + 6i
( |

关于c++ - 可以使用SPACE而不是ENTER来接受C++中的输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64811176/

相关文章:

windows - 在线程中调用 SHGetFileInfo 以避免 UI 卡住

c++ - 数值常量作为容器中的类型或变量?

c++ - 使用与索引不同的类访问 C++ 映射

javascript - javascript 中的 FLT_EPSILON 如何翻译这段代码?

linux - libgpsd.so : undefined reference to `bachk'

windows - IIS 站点不断提示输入 Windows 身份验证方法的凭据

windows - 通过.Net应用程序将用户添加到Windows Azure Active Directory

c++ - vector 问题的算法

linux - bash-控制要强调多少个 cpu/vm/io

c++ - 在 c/c++ 中使用 pthread_cond_wait 和 pthread_cond_signal 以循环方式执行多个线程