gpt4 book ai didi

c - cs50 的可读性。在 "if"行无缘无故地进行了有值(value)的更改

转载 作者:行者123 更新时间:2023-12-04 02:30:31 25 4
gpt4 key购买 nike

所以我 5 天前开始编程。我正在学习cs50类(class)。有一个任务(参见 https://cs50.harvard.edu/x/2020/psets/2/readability/ )来制作一个评估文本等级的程序。我做到了。

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

int main(void) {
int ln = 0;
int wn = 1;
int sn = 0;
string text = get_string("write your text:\n");
int l = strlen(text);
for (int i = 0; i < l; i++) {
if (isalpha(text[i])) {
ln++;
}
if ((char) (text[i]) == (char) (' ')) {
wn++;
}

if ((char) (text[i]) == (char) ('.') | (char) (text[i]) == ('!')
| (char) (text[i]) == ('?')) {
sn++;
}
}
float grade = ((float) ((ln / wn * 100) * 0.0588)
- ((float) ((sn / wn * 100) * 0.296)) - 15.8);

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

printf("%i, %i, %i", ln, wn, sn);
}

当我使用调试器时,我可以看到在那条长行中,我在那里进行所有数学运算,float grade 正好等于我需要的数字,一切都很好。但就在它之后,从“if”开始的地方,它无缘无故地变成了 1.8。我试着改变不同的参数,直到 if 行,数学仍然正确。我做错了什么?

最佳答案

代码至少有这个问题:等级为 1 或 16 时不打印任何内容

  // Nothing printed when grade is 1 or 16
if (grade > 1 && grade < 16) {
printf("Grade %f\n", grade);
} else if (grade < 1) {
printf("Before grade 1\n");
} else if (grade > 16) {
printf("grade 16+\n");
}

建议

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

整数除法可能是错误的。使用 FP 划分。

//                          vvvvvvv                               vvvvvvv 
// float grade = ((float) ((ln / wn * 100) * 0.0588) - ((float) ((sn / wn * 100) * 0.296)) - 15.8);
float grade = 0.0588 * ln / wn * 100 - 0.296 * sn / wn * 100 - 15.8;

改进

// if ((char) (text[i]) == (char) (' ')) {
if (text[i] == ' ') {

// if ((char) (text[i]) == (char) ('.') | (char) (text[i]) == ('!') | (char) (text[i]) == ('?')) {
if (text[i] == '.' || text[i] == '!' || text[i] == '?') {

关于c - cs50 的可读性。在 "if"行无缘无故地进行了有值(value)的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64463352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com