CS50 可读性 pset2 中的错误
Bug in CS50 Readability pset2
我的代码编译正确并且我通过了每个测试用例除了一个。
该错误出现在句子中 - “在我年轻和更脆弱的岁月里,我父亲给了我一些建议,从那以后我一直在思考这些建议。”,预计成绩为 7,但我的代码输出成绩为 8。
这是部署 check50 时的输出:
处理包含多个单词的单个句子
应为“7\n 级”而不是“8\n 级”
在打印出字母数 ( 96 ) 、单词数 ( 23 ) 句子数 ( 1 ) 、索引 ( 7.548 ) 和 round ( index ) 之后,对于这个特殊情况,它是 8 ,明确地,我看到了所有数字是正确的。
但是我不明白7.548怎么舍入到7。
请帮助我调试代码,让我知道我遗漏了什么。
谢谢!
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int count_letters(int length , char arr[]);
int count_words(int length , char arr[]);
int count_sentences(int n, char arr[]);
int main (void)
{
// Getting Input from user
string text = get_string("Text: ");
// Counting letters
int n = strlen(text);
int letter = count_letters(n, text);
int word = count_words(n, text);
int sentence = count_sentences(n, text);
float L = (letter*100)/word;
float S = (sentence*100)/word;
int index = round((0.0588 * L) - (0.296 * S) - 15.8);
if (index < 1)
{
printf("Before Grade 1\n");
}
else if (index > 16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n", index);
}
}
int count_letters(int length , char arr[])
{
int letters = 0;
for ( int i = 0 ; i < length ; i++)
{
if (tolower(arr[i]) >= 'a' && tolower(arr[i]) <= 'z' )
{
letters++ ;
}
}
return letters;
}
int count_words(int length , char arr[])
{
int words = 1 ;
for (int i =0 ; i < length ; i++)
{
if (arr[i]== ' ')
{
words++;
}
}
return words;
}
int count_sentences(int length, char arr[])
{
int sentence = 0;
for (int i = 0 ; i <length ; i++)
{
if (arr[i] == '.')
{
sentence ++;
}
else if (arr[i] == '?')
{
sentence ++;
}
else if ( arr[i] == '!')
{
sentence++;
}
}
return sentence;
}`
试试这个(改变它)
float L = (letter / (float) word) * 100;
float S = (sentence / (float) word) * 100;
需要将变量“word”指定为浮点数。
我有同样的问题。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int count_letters(int length, char arr[]);
int count_words(int length, char arr[]);
int count_sentences(int n, char arr[]);
int main(void)
{
// Getting Input from user
string text = get_string("Text: ");
// Length of text
int n = strlen(text);
//Calculating Coleman-Liau index
float L = ((float)count_letters(n, text) / (float)count_words(n, text)) * 100;
float S = ((float)count_sentences(n, text) / (float)count_words(n, text)) * 100;
int index = round((0.0588 * L) - (0.296 * S) - 15.8);
// Print Grades
if (index < 1)
{
printf("Before Grade 1\n");
}
else if (index > 16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n", index);
}
}
int count_letters(int length, char arr[])
{
int letters = 0; // Letter counter
for (int i = 0 ; i < length ; i++)
{
if (tolower(arr[i]) >= 'a' && tolower(arr[i]) <= 'z')
{
letters++ ;
}
}
return letters;
}
int count_words(int length, char arr[])
{
int words = 1 ; // word counter
for (int i = 0 ; i < length ; i++)
{
if (arr[i] == ' ')
{
words++;
}
}
return words;
}
int count_sentences(int length, char arr[])
{
int sentence = 0; // sentence counter
for (int i = 0 ; i < length ; i++)
{
if (arr[i] == '.' || arr[i] == '?' || arr[i] == '!')
{
sentence ++;
}
}
return sentence;
}
我的代码编译正确并且我通过了每个测试用例除了一个。 该错误出现在句子中 - “在我年轻和更脆弱的岁月里,我父亲给了我一些建议,从那以后我一直在思考这些建议。”,预计成绩为 7,但我的代码输出成绩为 8。
这是部署 check50 时的输出:
处理包含多个单词的单个句子
应为“7\n 级”而不是“8\n 级”
在打印出字母数 ( 96 ) 、单词数 ( 23 ) 句子数 ( 1 ) 、索引 ( 7.548 ) 和 round ( index ) 之后,对于这个特殊情况,它是 8 ,明确地,我看到了所有数字是正确的。 但是我不明白7.548怎么舍入到7。
请帮助我调试代码,让我知道我遗漏了什么。 谢谢!
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int count_letters(int length , char arr[]);
int count_words(int length , char arr[]);
int count_sentences(int n, char arr[]);
int main (void)
{
// Getting Input from user
string text = get_string("Text: ");
// Counting letters
int n = strlen(text);
int letter = count_letters(n, text);
int word = count_words(n, text);
int sentence = count_sentences(n, text);
float L = (letter*100)/word;
float S = (sentence*100)/word;
int index = round((0.0588 * L) - (0.296 * S) - 15.8);
if (index < 1)
{
printf("Before Grade 1\n");
}
else if (index > 16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n", index);
}
}
int count_letters(int length , char arr[])
{
int letters = 0;
for ( int i = 0 ; i < length ; i++)
{
if (tolower(arr[i]) >= 'a' && tolower(arr[i]) <= 'z' )
{
letters++ ;
}
}
return letters;
}
int count_words(int length , char arr[])
{
int words = 1 ;
for (int i =0 ; i < length ; i++)
{
if (arr[i]== ' ')
{
words++;
}
}
return words;
}
int count_sentences(int length, char arr[])
{
int sentence = 0;
for (int i = 0 ; i <length ; i++)
{
if (arr[i] == '.')
{
sentence ++;
}
else if (arr[i] == '?')
{
sentence ++;
}
else if ( arr[i] == '!')
{
sentence++;
}
}
return sentence;
}`
试试这个(改变它)
float L = (letter / (float) word) * 100;
float S = (sentence / (float) word) * 100;
需要将变量“word”指定为浮点数。 我有同样的问题。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int count_letters(int length, char arr[]);
int count_words(int length, char arr[]);
int count_sentences(int n, char arr[]);
int main(void)
{
// Getting Input from user
string text = get_string("Text: ");
// Length of text
int n = strlen(text);
//Calculating Coleman-Liau index
float L = ((float)count_letters(n, text) / (float)count_words(n, text)) * 100;
float S = ((float)count_sentences(n, text) / (float)count_words(n, text)) * 100;
int index = round((0.0588 * L) - (0.296 * S) - 15.8);
// Print Grades
if (index < 1)
{
printf("Before Grade 1\n");
}
else if (index > 16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n", index);
}
}
int count_letters(int length, char arr[])
{
int letters = 0; // Letter counter
for (int i = 0 ; i < length ; i++)
{
if (tolower(arr[i]) >= 'a' && tolower(arr[i]) <= 'z')
{
letters++ ;
}
}
return letters;
}
int count_words(int length, char arr[])
{
int words = 1 ; // word counter
for (int i = 0 ; i < length ; i++)
{
if (arr[i] == ' ')
{
words++;
}
}
return words;
}
int count_sentences(int length, char arr[])
{
int sentence = 0; // sentence counter
for (int i = 0 ; i < length ; i++)
{
if (arr[i] == '.' || arr[i] == '?' || arr[i] == '!')
{
sentence ++;
}
}
return sentence;
}