我是初学者的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 << "*";
}
我知道要做很多清理工作,但我正在试图弄清楚我是如何错误地使用%操作数的。任何信息性的回应将不胜感激。
由于
答案 0 :(得分:0)
您正尝试使用声明/计算为percent
的{{1}}获取模数(余数)。模数&#39;%&#39;符号要求操作数为整数,即
double
- op1和op2都需要是整数。 AFAIK它并没有巧妙地将它加倍(正如你可能预期的那样)。请尝试使用整数类型/替代方法。
答案 1 :(得分:0)
%
模运算符仅针对整数类型定义,而不是针对浮点类型。因此
percent % 1.0 < .5
不起作用。在这种情况下,你最有可能解决它:
percent - (unsigned) percent < .5
转换为unsigned
摆脱了小数部分。从原来的double中减去这个只会导致你想要的小数部分。
注意:这并不完美,需要percent
为正面(或更多工作)。