【问题标题】:(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 数增加如此之高?如果是这样,它在做什么?为什么?

【问题讨论】:

    标签: c++ string integer extract fstream


    【解决方案1】:

    它不是“非常大”。每次遇到a 时,您只是简单地输出当前计数,并且因为您不包含任何空格或换行符,所以每个数字将连接在一起并看起来像一个巨大的数字。

    试试这个:

    std::cout << charCount << std::endl;
    

    并考虑只在循环之后执行一次。除非出于某种原因您想显示所有中间计数。

    【讨论】:

    • 其实你是对的 - 在我在 stackoverflow 中重写的代码中,我将 charCount 初始化为零。在我的实际代码中,它没有被初始化。我正在增加一个未初始化的变量,这就是为什么我得到超过 100 万个值的原因,即使输入文件只有几百个字符长并且其中只有一个“a”。我希望打印出它在文件中的位置。我很感激澄清这个数字不应该那么高!
    • 我怀疑可能也是这种情况,但是当代码写在问题中时,我必须给出怀疑的好处。提问时不要重新输入程序,这一点非常重要。您必须复制/粘贴。您可以通过显示实际输出并指示文件中有多少 a 字符来进一步帮助您的问题。这将有助于确定问题,然后很明显您的问题代码与现实不符。
    猜你喜欢
    • 2017-09-24
    • 2013-03-30
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多