代码
#include<iostream>
int main()
{
char s[20];
char ch;
std::cin.getline(s,10);
std::cout<<"x"<<s<<"x"<<"\n";
std::cin>>ch;
std::cout<<"x"<<ch<<"x";
std::cin>>ch;
std::cout<<"x"<<ch<<"x";
std::cin>>ch;
std::cout<<"x"<<ch<<"x";
}
输出1
bonaparte // I entered these 9 characters as input
xbonapartex
a // input
xax
b // input
xbx
c // input
xcx
输出2
bonaparte2 // I entered these 10 characters as input
xbonapartex
x x
x x
x x
与第一个输出相比,我刚刚输入了一个额外的字母,这意味着通过键盘 bonaparte2
总共输入了 10 个字符。
据我所知,getline 将提取 9 个字符并添加 '\0' 并存储在字符串 s
中。因此流保留字符 2
和 \n
。所以第一个 cin>>ch
应该采用 2
并打印 x2x
。
现在第二个 cin>>ch
应该忽略 \n
因为它是前导空白字符,但这些都没有发生。程序不要求键盘输入。
最佳答案
在 std::cin.getline(s,10);
,因为输入大于 stream_size
提供,istream::getline
将流设置为失败状态,并阻止进一步的输入。
可以使用std::cin.clear()
轻松修复它。使用std::string
存储输入并让它处理长度也是一种替代方法。
相关:
关于c++ - getline() 和输入流的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67904226/