c – 检查用户是否没有在“cin”中输入任何内容

如何检查用户是否没有在cin命令中输入任何内容,只需按Enter键即可。
std::cin读取时,最好不要使用stream extraction operator>>因为这可能会有各种令人讨厌的副作用。例如,如果你有这个代码:

std::string name;
std::cin >> name;

而我进入约翰·多埃(John Doe),那么从cin读取的行将只是持有约翰的价值,留下后面的Doe将被读取。同样,如果我写:

int myInteger;
std::cin >> myInteger;

然后我键入John Doe,那么cin将进入错误状态,并将拒绝执行任何未来的读操作,直到您明确地清除其错误状态并刷新引起错误的字符。

用户输入的更好方法是使用std::getline从键盘读取字符,直到用户输入。例如:

std::string name;
getline(std::cin, name); // getline doesn't need the std:: prefix here because C++ has ADL.

ADL代表参数相关查找。现在,如果我进入John Doe,名字的价值将是John Doe,在cin上不会有任何数据。此外,这也让您测试用户是否刚刚输入:

std::string name;
getline(std::cin, name);

if (name.empty()) {
    /* ... nothing entered ... */
}

使用这种方法的缺点是,如果要读取格式化数据行,int或double,则必须从字符串中解析表示。我个人认为这是值得的,因为它给你一个更细粒度的控制,如果用户输入一些无效的“守卫”,从进入失败状态,该怎么办。

我教了一门C程序课程,并且有some lecture notes about the streams library有一个关于如何以安全的方式从cin读取格式化数据的详细信息(大部分在本章结尾)。我不知道你会发现这有多有用,但是如果有帮助,我以为我会发布链接。

希望这可以帮助!

http://stackoverflow.com/questions/4999650/checking-to-see-if-user-didnt-input-anything-in-cin

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 检查用户是否没有在“cin”中输入任何内容