Попытка скомпилировать читабельность pset2 из cs50. Дает те же ошибки, что и использование необъявленного идентификатора будет признателен за любые предложения

Пытаюсь скомпилировать читабельность pset2 из cs50.. Понятия не имею, что не так. Показывает мне много ошибок. Я пытался их исправить, но выдаёт новые. Начал думать, что проблема может быть совсем в другом. Так что я застрял и не могу найти способ исправить это. Был бы признателен за любую помощь! Благодарю вас!

    int main(void)
      {
      string text = get_string("Text:");
      int letterCount = 0;
      int wordCount = 0;
      int sentCount = 0;
      for(int n = 0; len = strlen(text); n < len; n++)
      {
        if(isalpha(text[n]))
           letterCount++;
        if ((n == 0 && text[n] != ' ') || (n != len - 1 && s[n] == ' ' && s[n +1] != ' '))
           wordCount++;
        if ((text[n] == '!') || (text[n] == '.') || (text[n] == '?'))
           sentCount++;
      }

      //Average number of letters per 100 words
      float avLetters = (letterCount / (float) wordCount) * 100;
      //Average number sentences per 100 words
      float avSent = (sentCount  / (float) wordCount) * 100;
    // find the index
    int Grade = round(0.0588 * avLetters  - 0.296 * avSent - 15.8);

      if(Grade < 16)
           printf("Grade %i\n", Grade);
      else if ( Grade >= 16)
           printf("Grade 16+");
      else
           printf("Before Grade 1");

}



Readability.c:12:18: error: use of undeclared identifier 'len'
  for(int n = 0; len = strlen(text); n < len; n++)
                 ^
Readability.c:12:42: error: use of undeclared identifier 'len'
  for(int n = 0; len = strlen(text); n < len; n++)
                                         ^
Readability.c:12:45: error: expected ')'
  for(int n = 0; len = strlen(text); n < len; n++)
                                            ^
Readability.c:12:6: note: to match this '('
  for(int n = 0; len = strlen(text); n < len; n++)
     ^
Readability.c:12:47: error: use of undeclared identifier 'n'
  for(int n = 0; len = strlen(text); n < len; n++)

            ^

person Lis.safina    schedule 26.05.2020    source источник
comment
Хорошо, что вы разместили минимальный воспроизводимый код (за исключением функции get_string :(), качество вопроса будет улучшено, если вы сможете опубликовать ошибки, с которыми вы сталкиваетесь.   -  person m0hithreddy    schedule 26.05.2020
comment
Добро пожаловать в СО. Было бы очень полезно, если бы вы поделились именами необъявленных идентификаторов? Если вы получите их много в таком крошечном фрагменте кода, я предполагаю, что вы пропустили включение всех заголовков.   -  person Gerhardh    schedule 26.05.2020
comment
Вы можете отредактировать свой вопрос, включив недостающую информацию. Просто нажмите кнопку edit под тегами вашего вопроса.   -  person Gerhardh    schedule 26.05.2020
comment
Я сделал :) Спасибо!   -  person Lis.safina    schedule 26.05.2020
comment
Также for(int n = 0; len = strlen(text); n < len; n++) -> for (int n = 0; text[n]; n++) text является строкой с нулевым завершением, просто перебирайте символы, пока не будет достигнута '\0' (ASCII 0). (это цель символа nul-terminating — он позволяет вам сканировать строку вперед и знать, когда вы достигли конца :)   -  person David C. Rankin    schedule 27.05.2020


Ответы (1)


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

#include<cs50.h>

int main(void) {
  string text = get_string("Text:");
  int letterCount = 0;
  int wordCount = 0;
  int sentCount = 0;
  for (int n = 0, len = strlen(text); n < len; n++) {
    if (isalpha(text[n]))
      letterCount++;
    if ((n == 0 && text[n] != ' ') ||
        (n != len - 1 && text[n] == ' ' && text[n + 1] != ' '))
      wordCount++;
    if ((text[n] == '!') || (text[n] == '.') || (text[n] == '?'))
      sentCount++;
  }

  // Average number of letters per 100 words
  float avLetters = (letterCount / (float)wordCount) * 100;
  // Average number sentences per 100 words
  float avSent = (sentCount / (float)wordCount) * 100;
  // find the index
  int Grade = round(0.0588 * avLetters - 0.296 * avSent - 15.8);

  if (Grade < 16)
    printf("Grade %i\n", Grade);
  else if (Grade >= 16)
    printf("Grade 16+");
  else
    printf("Before Grade 1");
}
person stensal    schedule 27.05.2020
comment
Спасибо, но это не помогло с ошибками. Исправление цикла, заменив его на for(int n = 0; text[n]; n++) - помогло. По крайней мере, я смог его скомпилировать. Но теперь есть логическая ошибка.. Пытаюсь найти ее.. - person Lis.safina; 27.05.2020