0

有什么办法可以让用户只按 Enter 键而不输入任何输入并继续执行程序std::cin吗?谢谢!

_tprintf(_T("\nENTER CHOICE: "));
cin>>ch;
cin.ignore();

当我用这个代码段运行程序时,很可能当我真的不想在那个字段上输入任何东西时,当我按下回车键时,光标只会产生新的行。

4

3 回答 3

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

所以我们可以看到它在 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.

于 2013-07-26T01:23:54.050 回答
0

如果我正确理解了您的问题,您可以简单地检查输入是否等于"";如果没有,请不要继续执行请求的操作。

编辑:哦,现在你编辑了你的问题,我知道你想要什么。只需使用cin.ignore();. 在此之前你不需要cin >>任何东西。

于 2013-07-26T00:29:55.677 回答
0

不,你不能cin用来这样做。

如果在程序等待输入时按下ENTERcin键,将完全忽略换行符(就像它忽略空格一样skipws),将换行符存储在输入流中并继续要求输入。除非它接收到相关类型的有效输入或遇到 EOF,否则它将不断要求您输入。

请改用该getline功能。

#include <string>
...
cout << "Enter Something\n";
string a;
getline(cin, a);
于 2013-07-28T12:31:59.920 回答