c++ - 使用getline后如何使cin工作?

标签 c++ input io 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 中设置了 failbit 标志。您必须清除标志才能在流中再次阅读:

...
cin.getline(str, 10, 'h');
cin.clear();                  # reset a possible error condition
cout<<str<<'-'<<endl;
cout<<"Enter a number:";
cin>>n;
...

关于c++ - 使用getline后如何使cin工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56474039/

相关文章:

performance - IO分析工具?

c++ - 在 C++ 中使用 Matlab 数据结构?

jquery - 键盘覆盖 webapp 中的文本输入(iOS)

android - Cordova:Android 键盘在切换字段时隐藏

Haskell:陷入 IO monad 困境

java - 高级 Java 文件 I/O 教程?尖端?建议?

c++ - SFINAE 不适用于复制构造函数

c++ - 流缓冲区之间的 block 级数据复制

c++ - 什么可能导致源自 fftw_destroy_plan 的段错误

c++ - 如何以这种特定方式读取和处理文件中的文本?