Синтаксическая ошибка с несколькими объявлениями в цикле for - PullRequest
0 голосов
/ 25 ноября 2018
#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 голосов
/ 25 ноября 2018

В действительности это не вопрос цикла 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...
};

Все переменные, которые вы объявляете в одном выражении, должны иметь одинаковый (базовый!) Тип, будь то внутри цикла, функциятело или глобальное. 'Базовый тип' : Ну, потому что вы по закону можете делать такие вещи, как int x, *p;, с x и p другого типа, но базовый / базовый тип в обоих случаях равен int.

0 голосов
/ 25 ноября 2018

Да, вы не можете этого сделать.

Кстати, это декларации, а не условия.Условием является только средняя часть цикла 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.

0 голосов
/ 25 ноября 2018

Вы можете встроить их в структуру.Я не рекомендую это, потому что 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++;
}
0 голосов
/ 25 ноября 2018

Вы не можете определять переменные с несколькими типами через запятую:

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

Вместо этого:

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

и x уже определено выше.

...