为我的C类介绍做一个家庭作业。 “编写一个C程序,其键盘输入是一个包含n个元素的数组 (可变长度数组)a1; ::: ;; an和值x。假设所有值都是整数。 如果ai + aj = x,程序输出true,对于某些i̸= j,程序输出为true,否则输出false。“
但是我的编译器在我的1st循环中一直报告问题。我确定这是简单/愚蠢的事情,有人请指出来吗? 错误:“每个未声明的标识符仅针对它出现的每个函数报告一次。”
我的if(number [i] + number [j] = x){line也有错误。 错误:需要1值作为赋值的左操作数。
#include <stdio.h>
#include <stdbool.h>
int main (void) {
//Local Declarations
int size;
int number [size];
int x;
bool equality;
//Statements
printf("Enter the size of the array");
scanf("%f", &size);
for (i = 0; i < size; i++) scanf("%f", &number[i]);
printf("Input x.");
scanf("%f", &x);
equality = false;
for (i = 0; i < size && equality = false; i++) {
for (j = i+1; j < size && equality = false; j++) {
if (number [i] + number [j] = x) {
equality = true;
}
}
}
if (equality = true){
printf("True.");
}
else {
printf("No distinct pair.");
}
return ;
} //main
答案 0 :(得分:3)
由于这是你的家庭作业,我不会给你准备好整个代码。 以下是代码中的错误点 -
1)定义i和j。 int i,j;
。当您将变量声明为int时,不要在scanf中使用%f。在大小,数量等处使用%d。
scanf("%d", &size);
2)如果条件(==而不是=)为@Ali Baig,则为赋值运算符。 if ( (number [i] + number [j]) == x)
和if (equality == true)
3)将静态大小分配给数组int number array[100]
或您感觉足够的某个大小。如果您不想使用静态数组,则可以使用malloc动态分配数组。您可以在此搜索更多内容。
答案 1 :(得分:2)
i
和j
未声明。声明他们
int i, j;
除此之外,您的程序的行为未定义,因为%f
期望float
类型的参数,但number[i]
类型为int
。将%f
更改为%d
。
scanf("%d", &number[i]);
和scanf("%f", &x);
相同,%f
需要float
类型的参数,但是您要将int
tupe参数传递给它。将其更改为
scanf("%d", &x);
我的if
(number [i] + number [j] = x)
{行也有错误。Error: 1value required as left operand of assignment
}。
正如其他人指出的那样;赋值运算符=
与等于运算符==
不同。要检查平等条件,您必须使用==
而不是=
。您收到错误的原因
line. Error: 1value required as left operand of assignment.
是赋值运算符的左侧总是需要一个l值,算术运算产生r值,因此在=
的左侧,这在C中是不可能的。
答案 2 :(得分:1)
试试这个。
if ( (number [i] + number [j]) == x)
=是赋值运算符,而==用于比较。