gpt4 book ai didi

c++ - cin、空格和 'buffering'

转载 作者:行者123 更新时间:2023-11-30 04:20:56 26 4
gpt4 key购买 nike

所以我写了这个非常简单的程序:

#include <iostream>
#include <string>
using namespace std;

int main()
{
string input;

cin >> input;
cout<< input<<endl;
cin >> input;
cout<< input<<endl;
cin >> input;
cout<< input<<endl;
return 0;
}

我在一行中输入“word1 word2 word3”,结果是预期的

word1
word2
word3

当然,现在我可以获得与 for (int i=0; i <3; i++){cin>>input; cout << input<<endl;} 相同的输出.

这让我想到了我的问题。一旦 cin 用完了可从 stdin 读取的内容,它将查询用户 (stdin)。

我有一种方法可以检测 cin 是否会从标准输入 缓冲区 中读取内容或查询用户。

我知道这是一个简单的问题,但它是家庭作业...而且我正处于工作引起的大量时间危机中,所以向分享权力的人致敬!

最佳答案

operator>> 无法完成您尝试执行的操作,因为它无法区分不同类型的空格。看看你最喜欢的C++标准库中的实现,下面是gcc 4.7.2的(bits/basic_string.tcc):

 995   // 21.3.7.9 basic_string::getline and operators
996 template<typename _CharT, typename _Traits, typename _Alloc>
997 basic_istream<_CharT, _Traits>&
998 operator>>(basic_istream<_CharT, _Traits>& __in,
999 basic_string<_CharT, _Traits, _Alloc>& __str)
1000 {
...
1027 while (__extracted < __n
1028 && !_Traits::eq_int_type(__c, __eof)
1029 && !__ct.is(__ctype_base::space,
1030 _Traits::to_char_type(__c)))
1031 {

如您所见,(第 1029 行)这会在遇到所有空格时停止(请参阅 http://en.cppreference.com/w/cpp/locale/ctype_base 了解 ctype_base::space)。

因此,您要做的是使用 getline(遇到换行符时停止)并通过 stringstream 提取:

getline(cin,mystring);
stringstream str(mystring);
while (str >> token) {
cout << token << '\n';
}

关于c++ - cin、空格和 'buffering',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14949719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com