c++ - cin.peek() 在 C++ 中如何工作?

标签 c++

当我将 cin.peek() 与“char”数据类型一起使用时,它工作得很好,但它不适用于“string”数据类型。 这很好用:

#include<iostream>
using namespace std;
int main(){
  cout<<"enter a word"<<endl;
  char a;
  cin>>a;
if(cin.peek()=='c'){
  cout<<"ha"<<endl;
}
return 0;
}

如果输入是“dce”它打印“ha”但是 下面的代码不做同样的工作:

#include<iostream>
#include<string>
using namespace std;
int main(){
  cout<<"enter a word"<<endl;
  string a;
  cin>>a;
if(cin.peek()=='c'){
  cout<<"ha"<<endl;
}
return 0;
}

是不是字符串数据类型更合适,因为我们将单词存储在“a”变量中。 “char”数据类型可以用来存储单词还是只能存储单个字母?

最佳答案

cin.peek()
返回输入序列中的下一个字符,而不提取它:该字符保留为要从流中提取的下一个字符。

对于你的两个代码,输入是 dce

在第一个代码中

char a;
cin>>a

它只从输入缓冲区中获取 dce 仍在其中,因此当您执行 cin.peek() 时,它会得到缓冲区中的下一个字符是 c。 但是对于第二个代码

string a;
cin>>a;

由于数据类型是字符串,它从输入流缓冲区中获取整个 dce,当您执行 cin.peek() 时,它会检查流中是否有任何内容但现在没有了。 因此它返回 EOF

If there are no more characters to read in the input sequence, or if any internal state flags is set, the function returns the end-of-file value (EOF), and leaves the proper internal state flags set:

关于c++ - cin.peek() 在 C++ 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43993795/

相关文章:

c++ - ifstream、无缓冲读取和无预读缓存?

c++ - 在 gcc 中使用 fsanitize 开关的 Boost 问题

c++ - 使用ffmpeg编码: video quality drops

c++ - 如何判断调用了哪个重载函数?

c++ - 在 C++11 中调用 lambda 从高阶函数返回时出现段错误

c++ - 连接问题

c++ - 如何使用模板将 QString 转换为类型名?

c++ - 如何找到递归函数中的错误?

c++ - cin.ignore 的 getline 问题

c++ - 音频转换 (LAME) C++ WAV -> MP3