有什么方法可以让用户只按Enter键而不输入任何输入,然后继续std::cin
中的程序?谢谢!
_tprintf(_T("\nENTER CHOICE: "));
cin>>ch;
cin.ignore();
当我使用这段代码运行程序时,我可能根本不想在该字段上输入任何内容,当我按下回车键时,光标将只生成新行。
答案 0 :(得分:2)
如果您“读入”std::noskipws
,则读取将停止跳过空格。这意味着当您阅读单个字符时,您可以读取空格和换行符等。
#include <iostream>
#include <iomanip>
int main() {
std::cin >> std::noskipws; //here's the magic
char input;
while(std::cin >> input) {
std::cout << ">" << input << '\n';
}
}
使用输入运行时:
a
b
c
产生
>a
>
>
>b
>
>
>c
因此,我们可以看到它在字母a
中读取,然后是换行符后的输入键,然后是空行,然后是字母b
等。
如果您希望用户在输入数字后点击回车键,则必须在代码中处理。
如果用户只是每行输入一个“东西”,实际上有一种更简单的方法:
#include <iostream>
int main() {
std::string line;
while(std::getline(std::cin, line)) {
std::cout << line << '\n';
}
}
这将读取输入中的字符直到行尾,允许您读取带空格的行或根本没有任何行的行。请注意,在使用std::cin >>
之后,它通常会在输入中留下换行符,因此如果在它之后立即执行std::getline
将返回一个空字符串。为避免这种情况,您可以使用std::cin.ignore(1, '\n')
在尝试使用std::getline
之前忽略换行符。
答案 1 :(得分:0)
如果我正确理解了您的问题,您只需检查输入是否等于""
;如果没有,请不要继续执行请求的操作。
cin.ignore();
即可。在此之前你不需要cin >>
。
答案 2 :(得分:0)
不,你不能使用cin
来做到这一点。
如果在程序等待输入时按 ENTER 键,cin
将完全忽略换行符(就像它忽略由skipws
引起的空格一样),存储输入流中的换行符并继续询问输入。除非收到有关类型的有效输入或遇到EOF,否则它会一直要求您输入。
改为使用getline
功能。
#include <string>
...
cout << "Enter Something\n";
string a;
getline(cin, a);