忽略输入字符
Ignoring the input character
所以,我想使用 cin.ignore(200,'') 输入一行并将其保存到字符串中,而不将 保存为字符串。但是当我这样做时:
cin.ignore(200,'n');
getline(cin,name);
它要求我输入两次内容,但我只想问我一次并将其保存到名称中。
我已经读过一些关于cin.clear()的东西,但我认为这不是我需要的,或者也许,我误解了清除的作用。
谢谢!
>cin.ignore(n, ch)
丢弃与std::cin
关联的流中的字符,直到跳过n
字符或看到ch
字符。cin.ignore(200, 'n');
丢弃第一个输入,直到换行符。然后你会得到一行,它将接受你的第二个输入。
如果要在执行空格分隔的输入操作后立即读取一行,则可能需要使用 cin.ignore(n, ch);
构造,例如
int i = 0;
std::cin >> i; // reads an integer, possibly leaving a 'n' in the stream
std::cin.ignore(200, 'n'); // reads and discards until a newline is seen
std::string name;
std::getline(std::cin, name); // reads a full line
在您的情况下,如果您尚未执行任何空格分隔的输入,则cin.ignore
将跳过第一次尝试提供行输入。你应该立即使用 std::getline。行尾的换行符不会追加到字符串中,但会从输入流中删除。
std::getline
的文档在"注释"部分中对此进行了解释。
对于更强大的行输入函数,您无法确定之前的输入操作是否在流中留下了换行符(或您使用的任何分隔符),您可以执行以下操作:
char ch;
std::cin.peek(ch);
if (ch == 'n') {
std::cin.ignore(1, 'n'); // or std::cin.get(ch);
}
std::string line;
std::getline(std::cin, line);
peek
成员函数将返回要读取的下一个字符,而不会将其从流中删除。如果是换行符,您可以继续忽略它。否则,getline
调用将读取整行,包括您刚刚偷看的字符。
或者,如果您只想使用空格,则可以使用 std::ws
操纵器。
您不需要使用 ignore()
。 getline()
不会将换行符放入字符串中。
它要求您输入两次的原因是因为 ignore()
函数正在删除直到您的前 200 个输入字符或直到换行符(您的 deliminator),因此下一个getline()
可能没有任何内容可读,因此要求您输入(当然,除非您的第一个输入包含超过 200 个字符,在这种情况下,它将读取缓冲区中的剩余字符)。
std::getline()
不会将分隔符添加到读取的字符串中,默认情况下是换行符。
- 如何忽略第一个字符输入后的所有内容
- 使用单个变量对字符输入进行计数
- 确定用户字符输入 C++ 的结束
- 将单个字符串/字符输入串行监视器
- 如何将字符输入限制为仅获取一个字符串"cin"
- C++:使用 fgets() 读取字符输入时出错
- 如何拒绝 cin 中的字符输入并定义最小和最大整数值
- C++ 字符输入仅输出第一个字母
- 限制 2D 数组中的字符输入
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- C++常量字符*输入
- 使用带符号字符输入的isalnum-Visual C++
- 限制C++中的字符输入
- 字符输入问题
- 字符** + 输入" "字符
- 文件 I/O 操作 - 奇怪的字符输入
- 如何在不暂停循环的情况下使用字符输入停止循环
- C++ - 对'if'语句使用特定字符输入
- 使用 "NEW" 获取字符输入和给定输出,并从用户那里获取字符串长度
- 正确的逐个字符输入