CS50 可读性结果问题
CS50 readability result issue
我写了下面的代码来解决可读性实验室。
它编译得很好,没有问题。
问题在于结果,由于未知原因,它总是将 s_avg
计算为零。
s_avg is
100 个单词的平均句子数。
#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
//prototypes
int count_letters (string text);
int count_words(string text);
int count_sent(string text);
int main(void)
{
// get the user to prompt part of the story
string story = get_string("Text: \n");
//variables
int letters = count_letters(story);
int words = count_words(story);
int sentences = count_sent(story);
//show results
printf("%i letter(s)\n",letters);
printf("%i word(s)\n",words);
printf("%i sentence(s)\n",sentences);
// Calculate average number of letters & sentences per 100 words
int l_avg = (letters/words)*100;
int s_avg = (sentences/words)*100;
// Calculate Coleman-Liau index
int index = round(0.0588 * l_avg - 0.296 * s_avg - 15.8);
// check grade level
if(index<1)
{
printf("Before Grade 1\n");
}
else if(index>16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n",index);
}
}
//count the number of letters
int count_letters (string text)
{
int l = 0;
for(int i=0,n=strlen(text); i<n; i++)
{
if((text[i]>=97 && text[i]<=122)||(text[i]>=65 && text[i]<=90))
{
l++ ;
}
}
return l;
}
//count the number of words
int count_words(string text)
{
int w = 1;
for(int i=0,n=strlen(text); i<n; i++)
{
if (text[i]==32)
{
w++ ;
}
}
return w ;
}
//count the number of sentences
int count_sent(string text)
{
int s=0;
for(int i=0,n=strlen(text); i<n; i++)
{
if ((text[i]==46) || (text[i]==33) || (text[i]==63))
{
s++ ;
}
}
return s;
}
我不知道为什么它一直计算 int s_avg = (sentences/words)*100;
为零。
我意识到使用 debug50 工具。
要计算平均字母数和句子数,请改用 double
类型变量。
double l_avg = ((double)letters / (double)words)*100;
double s_avg = ((double)sentences / (double)words)*100;
C 中的整数除法结果是整数,而不是浮点数。您必须明确地将股息和除数转换为 float
:
int i = 5 / 4;
printf("%d", i); // prints 1
float f = (float)5 / (float)4;
printf("%f", f); // prints 1.250000
所以,int s_avg = (sentences/words)*100
应该是:
float s_avg = (float)sentences / (float)words * 100;
我写了下面的代码来解决可读性实验室。
它编译得很好,没有问题。
问题在于结果,由于未知原因,它总是将 s_avg
计算为零。
s_avg is
100 个单词的平均句子数。
#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
//prototypes
int count_letters (string text);
int count_words(string text);
int count_sent(string text);
int main(void)
{
// get the user to prompt part of the story
string story = get_string("Text: \n");
//variables
int letters = count_letters(story);
int words = count_words(story);
int sentences = count_sent(story);
//show results
printf("%i letter(s)\n",letters);
printf("%i word(s)\n",words);
printf("%i sentence(s)\n",sentences);
// Calculate average number of letters & sentences per 100 words
int l_avg = (letters/words)*100;
int s_avg = (sentences/words)*100;
// Calculate Coleman-Liau index
int index = round(0.0588 * l_avg - 0.296 * s_avg - 15.8);
// check grade level
if(index<1)
{
printf("Before Grade 1\n");
}
else if(index>16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n",index);
}
}
//count the number of letters
int count_letters (string text)
{
int l = 0;
for(int i=0,n=strlen(text); i<n; i++)
{
if((text[i]>=97 && text[i]<=122)||(text[i]>=65 && text[i]<=90))
{
l++ ;
}
}
return l;
}
//count the number of words
int count_words(string text)
{
int w = 1;
for(int i=0,n=strlen(text); i<n; i++)
{
if (text[i]==32)
{
w++ ;
}
}
return w ;
}
//count the number of sentences
int count_sent(string text)
{
int s=0;
for(int i=0,n=strlen(text); i<n; i++)
{
if ((text[i]==46) || (text[i]==33) || (text[i]==63))
{
s++ ;
}
}
return s;
}
我不知道为什么它一直计算 int s_avg = (sentences/words)*100;
为零。
我意识到使用 debug50 工具。
要计算平均字母数和句子数,请改用 double
类型变量。
double l_avg = ((double)letters / (double)words)*100;
double s_avg = ((double)sentences / (double)words)*100;
C 中的整数除法结果是整数,而不是浮点数。您必须明确地将股息和除数转换为 float
:
int i = 5 / 4;
printf("%d", i); // prints 1
float f = (float)5 / (float)4;
printf("%f", f); // prints 1.250000
所以,int s_avg = (sentences/words)*100
应该是:
float s_avg = (float)sentences / (float)words * 100;