web-dev-qa-db-ja.com

floatとroundの読みやすさcs50の問題

私はすべてを試しましたが、コードのバグを理解できません。

ユーザー入力を取得して文字を数える

int main(void) 
{
int letters = 0;

//Getting user input
string text = get_string("Text: ");

//Counting the letters
for (int i = 0; i < strlen(text); i++) 
{
    if (isalpha(text[i])) 
    {
        letters++;
    }

}

単語と文を数える

int words = 1;

//Checking the spaces and counting the words
for (int i = 1; i < strlen(text); i++) 
{
    if ((isspace(text[i])) && (isalpha(text[i+1])) ) 
    {
        words++;
    }
}


int sentences = 0;

//Checking the symbols and counting the sentences
for (int i = 0; i < strlen(text); i++) 
{
    if (text[i] == '.' || text[i] == '!' || text[i] == '?') 
    {
        sentences++;
    }
}

そして、式を適用する

double L = 100.0 * letters / words;
double S = 100.0 * sentences / words;

double index = 0.0588 * L - 0.296 * S - 15.8;

int trueIndex = round(index);

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

}

このエラーが発生しました:「グレード9\n」ではなく「グレード8\n」が必要です。フロートの処理方法と関係があることはわかっていますが、何が問題なのかわかりません

2
Tamara N

単語のカウントから_(isalpha(text[i+1])_の部分を削除してみてください。 isalpha()は、アルファベット文字に対してのみtrueを返します。つまり、a-z、A-Zです。引用符はfalseを返し、そのようなWordはカウントされません。

アリスは姉が銀行に座っていて、何もすることにうんざりし始めていました。1〜2回、姉が読んでいた本をのぞきましたが、写真も会話もありませんでした"と本の使い方は何か"とアリスは思いました"なし写真や会話?"

_//Checking the spaces and counting the words
for (int i = 1; i < strlen(text); i++) 
{
    if (isspace(text[i]))
    {
        words++;
    }
}
_
0
Gribek