c++ - 使用getline后如何使cin工作?
问题描述
因此,我使用 cin.getline(str,10,'h') 读取了一个字符串,如您所见,我使用了自定义分隔符 'h' 并希望读取最多 9 个字符。完成此操作后,我使用 cin>>n 将一个整数读入我的 int 变量 n。
#include <iostream>
using namespace std;
int main() {
int n;
char str[100];
cin.getline(str, 10, 'h');
cout<<str<<'-'<<endl;
cout<<"Enter a number:";
cin>>n;
cout<<n;
return 0;
}
假设我通过以下输入
2 3 pl32
这是一个 '\n' 后跟“2 3 pl32”。我希望 getline 读取字符串"\n2 3 pl"
,然后 cin 读取整数 32。但事实并非如此。
实际输出显示 cin 读取了垃圾值:
2 3 pl-
Enter a number:0
编辑:好的,所以我现在明白了。Getline 设置了failbit
,这就是导致问题的原因。问题解决了。
解决方案
问题是getline
没有找到它的分隔符,并且在cin
. 您必须清除标志才能在流上再次读取:
...
cin.getline(str, 10, 'h');
cin.clear(); # reset a possible error condition
cout<<str<<'-'<<endl;
cout<<"Enter a number:";
cin>>n;
...
推荐阅读
- android - Flutter App 卡在 Android 启动器屏幕上
- postgresql - 在 postgresql 表之间移动大数据
- html - 在 Bootstrap 中垂直对齐图像旁边的文本
- swift - UIImagePickerController 不会在 iOS 14 上录制视频或拍照
- firebase - 如何从 Flutter 中的 firebase 实时数据库中检索当前用户名
- c# - 需要帮助使用 .Net Framework 4.8/Webform 中的 NPOI 创建 Excel 电子表格
- safari - safari 14.1 认为当我在 workbox.window 上调用 update() 时没有软件更新
- mongodb - 查找数组中与其他数组的 ID 匹配的所有对象 - mongoDB
- kubernetes - 使用 jndi 在 docker 上运行 java 应用程序连接到 weblogic 服务器(在 docker 上运行)
- ruby - 如何从 Watir cookie 生成 cookie 文件