(C++) 为啥我不能依靠提取运算符来充当迭代器?
Posted
技术标签:
【中文标题】(C++) 为啥我不能依靠提取运算符来充当迭代器?【英文标题】:(C++) Why can't I rely on an extration operator to act as an iterator?(C++) 为什么我不能依靠提取运算符来充当迭代器? 【发布时间】:2020-08-25 05:24:36 【问题描述】:#include <iostream>
#include <fstream>
int main()
std::ifstream file("input.txt");
char currentChar;
int charCount = 0;
while (file >> currentChar)
charCount++;
if (currentChar == 'a')
std::cout << charCount;
在上面,打印的 charCount 非常大。如果我将 charcount 移动到 if 语句中并将输入转换为字符“a”的重复,它会正确计数(或者会正确计算 a 的数量)。 “file >> currentChar”是什么导致 charCount 数增加如此之高?如果是这样,它在做什么?为什么?
【问题讨论】:
【参考方案1】:它不是“非常大”。每次遇到a
时,您只是简单地输出当前计数,并且因为您不包含任何空格或换行符,所以每个数字将连接在一起并看起来像一个巨大的数字。
试试这个:
std::cout << charCount << std::endl;
并考虑只在循环之后执行一次。除非出于某种原因您想显示所有中间计数。
【讨论】:
其实你是对的 - 在我在 *** 中重写的代码中,我将 charCount 初始化为零。在我的实际代码中,它没有被初始化。我正在增加一个未初始化的变量,这就是为什么我得到超过 100 万个值的原因,即使输入文件只有几百个字符长并且其中只有一个“a”。我希望打印出它在文件中的位置。我很感激澄清这个数字不应该那么高! 我怀疑可能也是这种情况,但是当代码写在问题中时,我必须给出怀疑的好处。提问时不要重新输入程序,这一点非常重要。您必须复制/粘贴。您可以通过显示实际输出并指示文件中有多少a
字符来进一步帮助您的问题。这将有助于确定问题,然后很明显您的问题代码与现实不符。以上是关于(C++) 为啥我不能依靠提取运算符来充当迭代器?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]