我正在编写一个用于操作符重载的非常简单的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/