测试结果有误
从字面上看,每个测试都是通过的,除了一个输出应该是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;
}
我已经尝试了太多的东西,我不知道还能尝试什么。
1条答案
按热度按时间6ioyuze21#
目前,你只增加你的字数 * 下一次 * 你看到一个字母字符或撇号后,* 没有 * 以前看到一个(初始状态)。正如评论中所指出的,要形成一个有效的 * 单词 ,需要考虑更多的边缘情况,比如连字符。
请注意,在本练习中, 单词 * 的数量可以简单地计算为空格的数量加1。
也就是说,