CS50 X可读性-只有一个输出的问题

rqdpfwrv  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(97)

测试结果有误
从字面上看,每个测试都是通过的,除了一个输出应该是8级而不是7级的测试。
我试过调试,没有通过的文本是:
我弟弟杰姆快十三岁时,手肘处严重骨折。当伤势痊愈后,杰姆对永远不能踢足球的恐惧得到缓解,他很少对自己的伤势感到不安。他的左臂比右臂稍短;站立或行走时,手背与身体成直角,拇指与大腿平行。
经过调试,我发现改变成绩的是整篇课文的最后一个点。
如果我发送的文本没有最后一个点,它将做8级,因为它是预期的。但如果我写了点,那就是七年级。
我的代码是:

#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
// Prototypes
int count_letters(string text);
int count_words(string text);
int count_sentences(string text);

int main(void)
{
    // Prompt the user for the text string.
    string userInput = get_string("Text: ");
    float l = count_letters(userInput);
    float w = count_words(userInput);
    float s = count_sentences(userInput);
    float lResult = ((float)l*100) / (float)w;
    float sResult = ((float)s*100) / (float)w;
    // float lResult = l / w * 100;
    // float sResult = s / w * 100;
    float index = 0.0588 * lResult - 0.296 * sResult - 15.8;
    int roundedIndex = round(index);

    if (roundedIndex <= 0)
    {
        printf("Before Grade 1\n");
    }
    else if (roundedIndex >= 16)
    {
        printf("Grade 16+\n");
    }
    else
    {
        printf("Grade %d\n", roundedIndex);
    }
    return 0;

}
// Count characters.
int count_letters(string text)
{
    // Storage the letters count.
    int lettersCount = 0;
    for (int i = 0; text[i] != '\0'; i++)
    {
        if (isalpha(text[i])){
            lettersCount++;
        }
    }
    return lettersCount;
}

int count_words(string text)
{
    int wordsCount = 0;
    int ifWord = 0;

    for(int i = 0; text[i] != '\0'; i++)
    {
        if (isalpha(text[i]) || text[i] == '\'')
        {
            if (!ifWord)
            {
                ifWord = 1;
                wordsCount++;
            }
        }
        else {
            ifWord = 0;
        }
    }
    return wordsCount;
}

int count_sentences(string text)
{
    int sentenceCount = 0;

    for (int i = 0; text[i] != '\0'; i++) {
        char c = text[i];
        if (c == '.' || c == '?' || c == '!') {
            sentenceCount++;
        }
    }
    return sentenceCount;
}

我已经尝试了太多的东西,我不知道还能尝试什么。

6ioyuze2

6ioyuze21#

目前,你只增加你的字数 * 下一次 * 你看到一个字母字符或撇号后,* 没有 * 以前看到一个(初始状态)。正如评论中所指出的,要形成一个有效的 * 单词 ,需要考虑更多的边缘情况,比如连字符。
请注意,在本练习中,
单词 * 的数量可以简单地计算为空格的数量加1。
也就是说,

int count_words(string text)
{
    int wordsCount = 1;

    for(int i = 0; text[i] != '\0'; i++)
    {
        if (text[i] == ' ')
        {   
            wordsCount++;
        }   
    }

    return wordsCount;
}

相关问题