有什么办法可以让用户只按 Enter 键而不输入任何输入并继续执行程序std::cin
吗?谢谢!
_tprintf(_T("\nENTER CHOICE: "));
cin>>ch;
cin.ignore();
当我用这个代码段运行程序时,很可能当我真的不想在那个字段上输入任何东西时,当我按下回车键时,光标只会产生新的行。
如果您“读入” 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
所以我们可以看到它在 letter 中读取a
,然后是换行后的 enter 键,然后是空行,然后是 letterb
等。
如果您希望用户在输入数字后按回车键,您必须在代码中处理它。
如果用户只是每行输入一个“东西”,实际上有一种更简单的方法:
#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
.
如果我正确理解了您的问题,您可以简单地检查输入是否等于""
;如果没有,请不要继续执行请求的操作。
编辑:哦,现在你编辑了你的问题,我知道你想要什么。只需使用cin.ignore();
. 在此之前你不需要cin >>
任何东西。
不,你不能cin
用来这样做。
如果在程序等待输入时按下ENTERcin
键,将完全忽略换行符(就像它忽略空格一样skipws
),将换行符存储在输入流中并继续要求输入。除非它接收到相关类型的有效输入或遇到 EOF,否则它将不断要求您输入。
请改用该getline
功能。
#include <string>
...
cout << "Enter Something\n";
string a;
getline(cin, a);