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而不是数组。有点不对劲。