使用getline后如何使cin工作?
How to make cin work after using getline?
所以,我使用 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;
...
所以,我使用 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;
...