cin.peek() 在 c++ 中是如何工作的

How does cin.peek() work in c++?

本文关键字:何工作 工作 peek c++ cin      更新时间:2023-10-16

当我使用带有"char"数据类型的cin.peek((时,它工作得很好,但它不适用于"字符串"数据类型。这工作正常:

#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

如果

输入序列中没有更多要读取的字符,或者如果 设置任何内部状态标志,该函数返回文件结尾 值 (EOF(,并保留正确的内部状态标志集: