-1

我在初学者的c ++课程中。目前,我们正在开展一个项目,该项目将计算字母表中每个字符在用户输入的短语中的次数。程序会将所有内容输出到表格中(从左到右:字母 | 出现次数 | 特定字符在整个短语中的百分比 | 表示最接近百分比的百分比的直方图)

This is THE most pernicious,
puzzling programming project yet,
but at least we can work in pairs.
^D
A         5       6.4%   ******
B         1       1.3%   *
C         3       3.8%   ****
D         0       0.0%

等等等等。

我遇到错误,类型为“double”和“double”的无效操作数对二元运算符%

我知道它与我的代码中的 % 运算符有关,但我不完全确定我是否理解我如何错误地使用它以及是否可以得到某种解释。

以下是它所涉及的功能:

void printchar ( const char s[], int length, double freq[], const char letters[ )
    int j = 0;
    int i = 0;
    double percent = freq[i]/length;
    for ( i = 0; i < 26; i++ )
    {
          cout << letters[i] << setw(5) << freq[i] << setw(5)
               << setprecision(1) << fixed << percent;
          if(percent % 1.0 < .5)
                cout << "*";
          for( j = 0; j <= percent; j++)
                cout << "*";
     }

我知道有很多清理工作要做,但我试图弄清楚我是如何错误地使用 % 操作数的。任何内容丰富的回复将不胜感激。

谢谢

4

2 回答 2

0

您正在尝试获取percent声明/计算为的模(余数) double。模 '%' 符号要求操作数是整数,即

op1 % op2- op1 和 op2 都必须是整数。AFAIK 它并没有巧妙地将其舍入翻倍(正如您可能期望的那样)。尝试使用整数类型/替代方法。

于 2014-11-19T00:29:02.690 回答
0

模运算符只为整数类型定义,%不为浮点类型定义。所以

percent % 1.0 < .5

不起作用。在这种情况下,您很可能可以通过以下方式解决它:

percent - (unsigned) percent < .5

转换为unsigned去掉小数部分。从原始双精度数中减去它只会导致您似乎想要的小数部分。

注意:这并不完美,需要percent积极(或更多工作)。

于 2014-11-19T00:30:32.667 回答