Неверный вывод в CS50 Pset2 Читабельность - PullRequest
0 голосов
/ 09 апреля 2020

Программа использует индекс Coleman-Liau. Он предназначен для вывода того, какой (американский) класс необходим для понимания текста. Формула имеет вид:

index = 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 голосов
/ 13 апреля 2020

если вы хотите считать буквы, вы должны проверить, является ли символ алфавитом c или нет. Для этого в C есть встроенная функция (в библиотеке ctype.h)

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

Для подсчета слов необходимо проверить, является ли символ пустым или нет. В этой же библиотеке вы можете использовать следующую функцию для проверки этого:

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

Возможно, ваша функция, в которой вы подсчитываете буквы, не работает правильно. Я бы напечатал количество букв, слов и предложений, чтобы увидеть, как ваш код ведет себя как обычно. Затем рассчитайте индекс.

...