【发布时间】:2020-09-09 11:15:01
【问题描述】:
当我运行我的代码时,它没有给我正确的分数,我不明白为什么,我真的不确定我哪里出错了或者我必须如何解决它。如果有人可以帮助我,请。
这是我的代码:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int main(void)
{
string text = get_string ("Text: "); // asking for text input
//counters set to zero
int letters = 0;
int words = 1;
int sentances = 0;
int n = strlen(text);
for (int i = 0; i < n; i++) // for counting letters words & sentances
{
if (isalpha (text[i]))
{
letters++;
}
else if (isspace (text [i]))
{
words++;
}
else if (text[i] == '.' || text[i] == '!' || text[i] == '?' )
{
sentances++;
}
}
float l= 100 / letters * words;
float s= 100 / sentances * words;
float grade = (0.0588 * l) - (0.296 * s) - 15.8;
grade = (round (grade));
printf ("%i letters, %i words, %i sentances \n", letters, words, sentances);
if (grade >= 1 && grade <= 16)
{
printf ("grade %i \n", (int) round (grade));
}
if (grade < 1)
{
printf ("Before grade 1\n");
}
if (grade > 16)
{
printf ("grade 16+\n");
}
}
当我检查它时,一切都显示在 1 年级之前。
如果我输入此文本:您喜欢这里还是那里?我不喜欢他们在这里或那里。我在任何地方都不会喜欢它们。
预期输出将是:2 级
实际输出:一年级前
我希望这个编辑有所帮助。
【问题讨论】:
-
使用您最喜欢的调试器单步执行程序并观察所有变量的值。
-
这个
100 / letters * words看起来不对。至少你会想要100.0 -
请补充:1)输入字符串 2)预期输出 3)实际输出
-
选择变量名称,例如
l或s,并使用诸如(0.0588 * l) - (0.296 * s) - 15.8;之类的值,而没有任何信息说明它们是什么是神秘的,并且使分析您编写的内容变得困难。选择有意义的变量名,避免使用幻数。 -
lundin 感谢您的帮助,尽管调试器一切正常,但我运行了它,因为它应该编码明智。