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

hmmo2u0o  于 2023-06-21  发布在  其他
关注(0)|答案(3)|浏览(240)

我一直在研究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')

50pmv0ei

50pmv0ei1#

在cs50中,stringchar*typedef,所以你有:

char *characters[numberOfCharacters];

这是一个指针数组,它们没有以任何方式初始化,在接下来的语句中,你访问这些初始化的值,你传递了一个不兼容的参数给isspace
此外,表达式:

int averageWords = characters / words * 100;

是奇数时,您将一个指向char的指针数组(它会衰减为一个指针,但这不是重点)除以一个int。这就是错误的来源,但您需要更正其余部分。
更不用说round(characters)了,这也很奇怪,该函数需要一个double参数,但同样,您向它传递了一个指针数组。

fnatzsnv

fnatzsnv2#

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

string characters[numberOfCharacters];

等同于声明

char * characters[numberOfCharacters];

所以在这个表达式中

isspace(characters[i]) == 0

参数characters[i]的类型为char *,而函数需要的参数类型为int
所以你至少需要声明

char characters[numberOfCharacters];

但无论如何这个循环

for (int i = 0; i == numberOfCharacters; i++) {
    if (isspace(characters[i]) == 0) {
        words ++;
    }
}

没有意义,因为数组characters没有初始化。
在这个循环中,您似乎要使用text而不是characters
这个表情

int averageWords = characters / words * 100;

是完全错误的,没有意义的。您正试图将指针(在将数组字符隐式转换为指向其第一个元素的指针之后)除以整数。但是这样的操作并没有为指针定义。
目前尚不清楚该计划的作用。

gcmastyq

gcmastyq3#

第一期:

string被定义为char *,所以这是错误的:

string characters[numberOfCharacters];

这是一个字符串数组,而不是长度为numberOfCharacters的字符串
把它改成这样:

char characters[numberOfCharacters];

第二期:

characters在第一次使用时未初始化,您可以在循环中使用text

第三期:

对字符串或数组执行数学运算(round(characters)characters / words * 100)肯定是错误的,没有任何意义,所以我不确定你在这里要做什么
我回顾了清楚的问题,但由于不清楚您的程序试图做什么,我无法提供进一步的反馈

相关问题