【问题标题】:I have an issue printing out an array我在打印数组时遇到问题
【发布时间】:2013-12-03 15:16:17
【问题描述】:

我不明白为什么这不能正确打印出来。

void countChars(ifstream& inData, string filename, int x[], int y[])
{
    char ch;
    int count = 0;

    for(int i=0; i < 58; i++)
    {
        x[i] = 0;
}
    inData.open(filename.c_str());

    while (inData >> ch)
    {
        count++;
        if ((ch >= '!') && (ch <= 'Z'))
        {
            x[ch - '!']++;
        }
    }

    for(int i=0; i < 58; i++)
    {
        y[i] = (x[i] / count * 100);
        cout << y[i] << endl;
    }   
}

它应该打印出每个字符组成的文件的百分比。它打印出来的是 58 个 0。我不明白为什么它不能正确打印出来,我重新阅读了有关数组的章节,但找不到任何关于此类问题的信息。我尝试先搜索,但我什至不确定我应该搜索哪些术语来解决这个问题。

【问题讨论】:

  • x[i] / count 是一个整数运算,结果为 0,因为整数是整数,而不是浮点数。重新排列你的公式,这样就不会发生这种情况,或者将其中一个整数转换为浮点数。
  • @RetiredNinja 同意。预计为 0 或 100,并且介于两者之间。

标签: c++


【解决方案1】:

数组 x,y 和 count 是整数数组。所以因为 x[i]

【讨论】:

  • 除非每个字符都相同且在范围内。
  • @bvj: 是的,但概率真的很小
【解决方案2】:

显然在你的行中

y[i] = x[i] / count * 100

x-Array 中的每个字段都可能小于 count,因此除法的结果始终低于 1,因为您选择使用始终为 0 且 0 * 100 = 仍为 0 的整数。

【讨论】:

    【解决方案3】:

    将 x 或 count 的数据类型更改为 float 或 double。

    【讨论】:

      【解决方案4】:
      y[i] = (int)(x[i] * 100.0 / count + 0.5);
      

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 2021-02-08
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多