我一直在研究cs50的可读性,我真的被我做错了什么/我错过了什么卡住了。
#include <stdio.h>
#include <math.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main() {
string text = get_string("Text: ");
int sentences = 0;
int numberOfCharacters = strlen(text);
string characters[numberOfCharacters];
int words = 0;
for (int i = 0; i == numberOfCharacters; i++) {
if (isspace(characters[i]) == 0) {
words ++;
}
}
for (int i=0; i < numberOfCharacters; i++) {
if (text[i]=='.') {
numberOfCharacters++;
}
}
int averageWords = characters / words * 100;
int index = 0.0588 * round(characters) - 0.296 * round(sentences) - 15.8;
printf("Grade %d \n", index);
}
我使用help 50得到的错误是:readability.c:26:35: error: invalid operands to binary expression ('string [numberOfCharacters]' and 'int')
3条答案
按热度按时间50pmv0ei1#
在cs50中,
string
是char*
的typedef
,所以你有:这是一个指针数组,它们没有以任何方式初始化,在接下来的语句中,你访问这些初始化的值,你传递了一个不兼容的参数给
isspace
。此外,表达式:
是奇数时,您将一个指向
char
的指针数组(它会衰减为一个指针,但这不是重点)除以一个int
。这就是错误的来源,但您需要更正其余部分。更不用说
round(characters)
了,这也很奇怪,该函数需要一个double
参数,但同样,您向它传递了一个指针数组。fnatzsnv2#
名称
string
被定义为char * 类型的别名。所以这个宣言等同于声明
所以在这个表达式中
参数
characters[i]
的类型为char *
,而函数需要的参数类型为int
。所以你至少需要声明
但无论如何这个循环
没有意义,因为数组
characters
没有初始化。在这个循环中,您似乎要使用
text
而不是characters
。这个表情
是完全错误的,没有意义的。您正试图将指针(在将数组字符隐式转换为指向其第一个元素的指针之后)除以整数。但是这样的操作并没有为指针定义。
目前尚不清楚该计划的作用。
gcmastyq3#
第一期:
string
被定义为char *
,所以这是错误的:这是一个字符串数组,而不是长度为
numberOfCharacters
的字符串把它改成这样:
第二期:
characters
在第一次使用时未初始化,您可以在循环中使用text
第三期:
对字符串或数组执行数学运算(
round(characters)
和characters / words * 100
)肯定是错误的,没有任何意义,所以我不确定你在这里要做什么我回顾了清楚的问题,但由于不清楚您的程序试图做什么,我无法提供进一步的反馈