【发布时间】:2020-12-27 17:07:30
【问题描述】:
背景:这里是 C 菜鸟。我正在尝试整理一个计算一段文本可读性的程序。为此,我使用 Coleman–Liau 索引。我正在尝试构建一个函数并传递 3 个参数,即文本中有多少个字母、单词和句子。
问题: 函数没有按预期处理变量。我已经包含了一些打印语句来查看函数中发生了什么
在我的 main() 函数下面声明的函数:
float Coleman_Liau_index(int words_, int letters_, int sentences_)
{
float L = (letters_ / words_) * 100;
printf("Average number of letters per 100 words %.2f\n", L);
float S = (sentences_ / words_) * 100;
printf("Average number of sentences per 100 words %.2f\n", S);
float index = 0.0588 * L - 0.296 * S - 15.8;
return index;
}
main() 内部函数的实现:
float words = spaces + 1;
printf("%i letter(s)\n", letter);
printf("%.0f word(s)\n", words);
printf("%i sentence(s)\n", sentences);
//Putting it all together - Coleman_Liau_index
float index = Coleman_Liau_index(words, letter, sentences);
错误输出示例:
Average number of letters per 100 words 400.00
Average number of sentences per 100 words 0.00
所需输出示例:
Average number of letters per 100 words 421.43
Average number of sentences per 100 words 4.29
【问题讨论】:
-
在计算
letters_ / words_和sentences_ / words_时,你正在做整数运算,所以你会丢失分数。 -
您能否向我们解释一下您认为
(letters_ / words_)的类型是什么?还有(sentences_ / words_)? -
有趣。我完全理解为什么不正确地转换这些变量会是一个问题,但我尝试这样做而不在函数之外进行转换,它不会很好。为什么函数会更改所需的声明?
-
它与是否在函数内部无关,它与操作数的类型有关。如果你将两个整数相除,你会得到一个整数结果。您需要按照您所说的那样显示代码“工作”的位置。