C程序不会编译,不确定原因

时间:2013-11-21 06:07:57

标签: c arrays for-loop

为我的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

3 个答案:

答案 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)

ij未声明。声明他们

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)

=是赋值运算符,而==用于比较。