允许用户跳过输入输入,只需按Enter键

时间:2013-07-26 00:15:42

标签: c++ input cin

有什么方法可以让用户只按Enter键而不输入任何输入,然后继续std::cin中的程序?谢谢!

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

当我使用这段代码运行程序时,我可能根本不想在该字段上输入任何内容,当我按下回车键时,光标将只生成新行。

3 个答案:

答案 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);