When using check50 or inputting the provided texts, my program passes all but one test; the "complex single sentence" test returns a Grade 9 instead of Grade 8 (Coleman-Liau index returns 8.785455 and is rounded up). I've checked my code against some of the other examples people have posted on here to see if I can spot anything. I'm using some of the functions included in libraries on the CS50 website (which might be the issue) and counted out the words/letters/sentences from the text against the ones returned by my loop, and cant find any issue. My maths looks right to me, and I've checked it against 'correct' code from here. My counters are ints but cast as floats during equations.
int main(void)
{
// Get user input
string text = get_string("Text: ");
int letters = 0;
int sentences = 0;
int i = 0;
int words = 1;
// Count words, letters and sentences
do
{
int al = isalpha(text[i]);
if (al > 0)
{
letters++;
//printf("letters: %i\n", letters);
}
// Checks for space
int sp = isspace(text[i]);
if(sp > 0)
{
// Checks that space is followed by letter
al = isalpha(text[i + 1]);
if (al > 0)
{
words++;
//printf("words: %i\n", words);
}
}
// checks for punctuation
if (text[i] == '.' || text[i] == '!' || text[i] == '?')
{
sentences++;
//printf("sentences: %i\n", sentences);
}
i++;
}
while (i < strlen(text));
//printf("letters: %i\nwords: %i\nsentences: %i\n", letters, words, sentences);
// Calc L
float L = ((float) letters / (float) words * 100.0);
//printf("L: %f\n", L);
// Calc S
float S = ((float) sentences / (float) words * 100.0);
//printf("S: %f\n", S);
// Calc index
float index = (0.0588 * L - 0.296 * S - 15.8);
//printf("index: %f\n", index);
// Print results
if (index >= 16)
{
printf("Grade 16+\n");
}
else if (index < 1)
{
printf("Before Grade 1\n");
}
else
{
printf ("Grade %.f\n", round(index));
}
}
Here are the check50 results;
Results for cs50/problems/2020/x/readability generated by check50 v3.0.10
:) readability.c exists
:) readability.c compiles
:) handles single sentence with multiple words
:) handles punctuation within a single sentence
:( handles more complex single sentence
expected "Grade 8\n", not "Grade 9\n"
:) handles multiple sentences
:) handles multiple more complex sentences
:) handles longer passages
:) handles questions in passage
:) handles reading level before Grade 1
:) handles reading level at Grade 16+
I originally coded this problem, had this bug, tried to debug and ended up rewriting. That usually works for me, but I've still got the same bug. It did cross my mind that it's an issue with the test, but probably not.
If anyone can help me spot the likely glaring mistake I've overlooked, I'd be very appreciative.