C 错误:二进制表达式的无效操作数

C 错误:二进制表达式的无效操作数,c,cs50,C,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; in

我一直在努力提高可读性,我真的被我做错了什么/我错过了什么所困扰

#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);
}
#包括
#包括
#包括
#包括
#包括
int main(){
字符串文本=获取字符串(“文本:”);
整句=0;
int numberOfCharacters=strlen(文本);
字符串[numberOfCharacters];
int字=0;
for(int i=0;i==numberOfCharacters;i++){
if(isspace(字符[i])==0){
words++;
}
}
for(int i=0;i
使用help50,我从中得到的错误是:
readability.c:26:35:错误:二进制表达式('string[numberOfCharacters]”和'int')的操作数无效。

我不明白,因此如果可能,请提供帮助:)

第一期:
string
被定义为
char*
,因此这是错误的:

string characters[numberOfCharacters];
这将为您提供一个字符串数组,而不是长度
numberOfCharacters

将其更改为:

char characters[numberOfCharacters];
第二期:
字符
在首次使用时未初始化,您可能打算在循环中使用
文本

第三期: 对字符串或数组执行数学(
round(characters)
characters/words*100
)肯定是错误的,毫无意义,因此我不确定您在这里尝试做什么


我回顾了清楚的问题,但由于不清楚您的程序试图做什么,我无法在cs50中提供进一步的反馈。字符串是一个
typedef
char*
,因此您有:

char *characters[numberOfCharacters];
这是一个指针数组,它们不会以任何方式初始化,在接下来的语句中,您访问这些单位化值,并将不兼容的参数传递给
isspace

此外,表达方式:

 int averageWords = characters / words * 100;
奇怪的是,您将指向
char
的指针数组(它衰减为一个指针,但与点无关)除以
int
。这就是错误产生的原因,但是您需要纠正其余的错误


更不用说
round(characters)
,这也很奇怪,该函数需要一个
double
参数,但同样,您要向它传递一个指针数组。

名称
string
被定义为char*类型的别名。所以这个宣言

string characters[numberOfCharacters];
char * characters[numberOfCharacters];
等同于声明

string characters[numberOfCharacters];
char * characters[numberOfCharacters];
所以在这个表达式中

isspace(characters[i]) == 0
int averageWords = characters / words * 100;
参数
characters[i]
的类型为
char*
,而函数需要的参数类型为
int

所以你至少需要申报

char characters[numberOfCharacters];
但无论如何,这个循环

for (int i = 0; i == numberOfCharacters; i++) {
    if (isspace(characters[i]) == 0) {
        words ++;
    }
}
没有意义,因为数组
字符
未初始化

在这个循环中,您似乎要使用
文本
而不是
字符

这句话

isspace(characters[i]) == 0
int averageWords = characters / words * 100;
这完全是错误的,毫无意义。您正在尝试将指针(将数组字符隐式转换为指向其第一个元素的指针后)除以整数。但是这样的操作并没有为指针定义


因此不清楚该程序的功能。

仔细看这一行:
int averageWords=characters/words*100
字符的类型是什么?
字符串[numberOfCharacters]看起来是错误的,因为
string text=get_string(“text:”)
似乎将
string
定义为
char*
或类似,因此
char*字符[numberOfCharacters]
将为您提供一个字符串数组,而不是字符串。错误与可读性无关,因此请选择一个更好的标题。除非字符串以空格结尾,否则您的字数计算将错误,因为您仅在找到空格时才递增
单词。此外,如果一行中有两个空格,它将计算两个单词。作为一个实际的用例,想象一个被空格包围的破折号——破折号不应该算作一个单词,对吗?你真的不想让任何一个循环通过
字符
,因为字符是程序的输出——你想通过
文本
循环,不是吗?。此外,在第二个循环中,您使用
numberOfCharacters
作为循环条件,但也增加
numberOfCharacters
以跟踪您发现的内容-这两个东西需要是独立的变量。。。好的,等等。当您
int averageWords=characters/words*100
这意味着
字符
是一个int而不是数组。有点不对劲。