for循环中有多个声明的语法错误

时间:2018-11-25 13:31:00

标签: c for-loop syntax-error

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL, "Rus");

    float arr[25];
    int i;
    double x;
    int a, b, c, e, f;
    double y = a * pow(x, 2) + b * x + c;

    printf("a: ");
    scanf_s("%d", &a);

    printf("b: ");
    scanf_s("%d", &b);

    printf("c: ");
    scanf_s("%d", &c);

    printf("e: ");
    scanf_s("%d", &e);

    printf("f: ");
    scanf_s("%d", &f);

    double interval = (f - e) / 25.0 ;

    for (int i = 0, double x = e; i < 25; i++, x += interval)
    {
        printf("%f", y);
        x++;
    }

    system("pause");
}

我得到 [错误]预期标识符或'('在'double'之前 。我该如何解决呢?看来我真的不需要更改

for (int i = 0, double x = e; i < 25; i++, x += interval)

或者我可能是错误的,并且不知道如何编写多个条件。

4 个答案:

答案 0 :(得分:2)

是的,你不能那样做。

顺便说一句,这些是声明,而不是条件。仅for循环的中间部分是条件。

您可以在for循环的第一部分中声明多个变量,但前提是它们具有相同的基本类型(例如int):

for (int x = 1, y = 2, z = 3; ...; ...)

您的解决方法是在循环外声明至少一个变量:

{  // this outer block limits the scope of x
    double x = e;
    for (int i = 0; i < 25; i++, x += interval) 
    {
        printf("%f", y);
        x++;
    }
}

也就是说,您的代码实际上没有任何意义。您的循环不使用x,因此没有必要进行设置。另一方面,您要打印25次的值(y)在循环中不会更改。它设置在主函数的顶部,由未初始化的另一个x变量计算得出。

您应将y的声明和初始化移入循环并删除外部x。另请参见https://stackoverflow.com/a/53238897/1848654

答案 1 :(得分:1)

您不能用逗号定义多种类型的变量:

for(int i = 0, double x... 

相反:

x = e;
for (int i = 0; i<...

x已在上面定义。

答案 2 :(得分:1)

您可以将它们嵌入到结构中。我不建议这样做,因为IMO这不是一个好的编码实践,因为它不易理解(乍一看)…

typedef struct {int i; double x;} S;
for (S yourStruct = {0,e}; yourStruct.i < 25 ; yourStruct.i++, yourStruct.x += interval)
{
    printf("%f", y);
    yourStruct.x++;
}

答案 3 :(得分:0)

这实际上不是for循环的问题:

void f(void)
{
    int x, y; // legal - and you can do the same in a for loop's initialization section
    int z, double d; // can't do that either, even outside for loop...
};

在单个表达式中声明的所有变量都必须具有相同的(基本!)类型,无论是在for循环,函数体还是全局变量中。 “基本类型” :嗯,因为您在法律上可以做类似int x, *p;之类的事情,其中​​xp是不同类型的,但是基本/基础类型两种情况都是int