CS50 Pset2可读性输出错误

时间:2020-04-09 15:30:17

标签: c cs50

程序使用Coleman-Liau索引。它旨在输出理解该文本所需的(美国)年级水平。公式是:

指数= 0.0588 * L-0.296 * S-15.8

当我输入诸如hello there之类的简单文本时,我的成绩等级较高,但是如果输入较复杂的文本,则我的成绩等级较低。

 #include <stdio.h>
 #include <cs50.h>
 #include <string.h>
 #include <math.h>

 float letter = 0;
 float word = 1;
 float sentence = 0;

 int main(void)
{
  string text = get_string("Text: ");

  for (int i = 0; i < strlen(text); i++)
  {
      if ((text[i] >= 'a' && text[i] <= 'z') || (text[i] >= 'A' && text[i] <= 'Z'))
      {
          letter++;
      }
      else if (text[i] == ' ')
      {
          word++;
      }
      else if (text[i] == '.' || text[i] == '!' || text[i] == '?')
      {
          sentence++;
      }
  }
  printf("Letter:%f, Word:%f, Sentence:%f\n", letter, word, sentence);

  float L = letter/word * 100;
  float S = sentence/word * 100;
  float x = (0.0588 * L) - (0.296 * S) - 15.8;
  if (x < 16 && x >= 0)
  {
      printf("Grade Level: %i",(int) round(x));
  }
  else if (x > 16)
  {
      printf("Grade Level: 16+");
  }
  else 
  {
      printf("Before Grade 1");
  }

1 个答案:

答案 0 :(得分:0)

如果要计算字母,则应检查字符是否为字母。 C中有一个内置函数(在ctype.h库中)

isalpha() //the function returns non-zero if character is alphabetic.

要对单词计数,需要检查字符是否为空白。在同一个库中,可以使用以下函数进行检查。

isblank() //the function returns non-zero if character is blank.

可能是您计算字母的功能无法正常工作。我将打印字母,单词,句子的数量,以查看您的代码是否正常运行。然后,计算索引。