为什么 cin.ignore() 后面的 getline(cin, var) 不读取字符串的第一个字符?
Why doesn't getline(cin, var) after cin.ignore() read the first character of the string?
我正在C++中创建一个简单的控制台应用程序,它从用户那里获取字符串和字符输入。为了简单起见,我想使用string和char数据类型将输入从cin传递到.
为了获得字符串输入,我使用getline方法:
string var;
cin.ignore(); //I used ignore() because it prevents skipping a line after using cin >> var
getline(cin, var);
为了获得char输入,我使用cin>>var方法:
char var;
cin >> var;
这在大多数情况下都很好。但是,当我使用getline输入字符串时,它会忽略字符串的第一个字符。
是否可以使用getline和cin>>而不必使用忽略,或者我可以调用一个方法来确保我的第一个字符不会被跳过?
这是我同时使用getline和cin>>的完整代码示例:
string firstName;
string lastName;
char gender = 'A';
cout << "First Name: ";
cin.ignore();
getline(cin, firstName);
cout << "Last Name: ";
cin.ignore();
getline(cin, lastName);
while(genderChar != 'M' && genderChar != 'F')
{
cout << "Gender (M/F): ";
cin >> genderChar;
genderChar = toupper(genderChar);
}
cin>>var;
仅从缓冲器中获取CCD_ 2,将CCD_ 3留在缓冲器中,然后立即被getline
捕获
所以,以下是很好的,(如果我正确理解你的问题)
cin>>var;
cin.ignore(); //Skip trailing 'n'
getline(cin, var);
根据编辑后
geline
不必使用cin.ignore();
这将从缓冲区中提取字符,并将它们存储到firstName
或(lastName
)中,直到此处的定界字符为换行符('n'
)。
ignore()
不跳过一行,而是跳过一个字符。你能发送示例代码并详细说明对cin.ignore()
的需求吗?
std::cin.ignore()
将忽略输入的第一个字符。
对于您的情况,在std::cin
之后使用std::cin.ignore()
,然后使用getline()
来忽略换行符:
cin>>ch;
cin.ignore(); //to skip the newline character in the buffer
getline(cin,var);
您使用的是std::getline()
之前的std::isstream::ignore()
。CCD_ 18将从输入序列中提取第一个字符并丢弃该字符。
http://www.cplusplus.com/reference/istream/istream/ignore/
因此,基本上,cin>>var
将'\n'字符从缓冲区中排除。所以现在当你打电话getline读取'\n'字符并停止。因此,当我们在cin之后使用它时,我们使用cin.ignore()来忽略第一个字符getline reads,即'\n'。
但是getline不会留下"\n"字符,而是将所有内容都存储在缓冲区中,直到找到"\n"个字符,然后也存储"\n",然后停止。
因此,在代码中,当您在getline之后使用cin.ignore()并再次使用getline获取输入时,它会忽略字符串的第一个字符,而不是'\n'。这就是第一个字符缺失的原因。
希望这能回答你的问题。
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 由cin中的字符串中未捕获空白引起的分割错误
- cin >> int 给定一个字符串将 int 赋值为 0
- 从 cin 读取不会返回整个输入字符串
- 而循环跳过 cin.getline() 对于 C 字符串
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 有没有办法让C++从 cin 中接收不确定数量的字符串?
- 在循环中使用 cin.get() 输入字符串
- 为什么 cin 在包含字符串标头后接受字符串输入
- 使用分配构造字符串时是否可以使用 cin?
- cin>>gender 和 cin>>*gender ( c 样式文本字符串)有什么区别
- CIN 标准::带空格的字符串
- 如何将字符输入限制为仅获取一个字符串"cin"
- C++:在 cin 重载中拼接字符串
- STD :: cin和Scanf()应用于字符串之间的区别
- 如何在CIN中以C 的CIN中的所有读取为字符串
- 将字符串从BASH脚本(C 程序)推入CIN
- cin字符串转换为Vector(c++)
- cin字符串到一个向量中,并对它们进行快速排序