Что именно квалифицируется как объявление идентификатора?

#c #undeclared-identifier

#c #необъявленный идентификатор

Вопрос:

Я пытаюсь сконструировать некоторый код таким образом, чтобы он принимал ввод пользователя, запускал один цикл, принимал конечное значение этого цикла, а затем запускал это значение во втором цикле (я также добавляю к счетчику каждый раз, когда выполняется цикл, и печатаю его в конце), это быломоя попытка кодирования этого:

 {
    float input = get_float("%s", "Input: ");
    float w = input * 100;
    {
    int c = 0;
    for (int q = w; q > 24; q = q - 25)
        {
        c  ;
        }
    for (int d = q; d > 9; d = d - 10)
        {
        c  ;
        }
    printf("%i", c);
    }
}
 

Ошибка , которую я получаю, такова error: use of undeclared identifier 'q' . Я подумал, что, поскольку он использовался ранее в коде, идентифицировать его позже не составит труда, хотя, очевидно, это не так. Любой совет по поводу того, как правильно объявить «q», был бы оценен — или, возможно, весь мой подход просто ошибочен?

Комментарии:

1. Переменные / идентификаторы имеют свою область действия. q находится в области действия блока for цикла, в котором он был объявлен.

Ответ №1:

q Объявленное в цикле доступно только в цикле. Вы должны объявить его перед циклом, чтобы сделать его доступным после цикла.

 {
    float input = get_float("%s", "Input: ");
    float w = input * 100;
    {
    int c = 0;
    int q; // declare q before the loop
    for (q = w; q > 24; q = q - 25) // no declaration of q here
        {
        c  ;
        }
    for (int d = q; d > 9; d = d - 10)
        {
        c  ;
        }
    printf("%i", c);
    }
}
 

Ответ №2:

Когда вы объявляете q в первом цикле, он существует только внутри этого одного цикла как локальная переменная

Объявление переменной вне области for видимости оставит ее доступной во втором цикле

 {
    float input = get_float("%s", "Input: ");
    float w = input * 100;
    {
    int c = 0;
    int q;
    for (q = w; q > 24; q = q - 25)
        {
        c  ;
        }
    for (int d = q; d > 9; d = d - 10)
        {
        c  ;
        }
    printf("%i", c);
    }
}```
 

Ответ №3:

for (int q = w; q > 24; q = q - 25) <- q в этом блоке в порядке

for (int d = q; d > 9; d = d - 10) <- q не существует в этом блоке

Добавьте int q; ниже int c = 0; и измените for (int q = w; q > 24; q = q - 25) на for (q = w; q > 24; q = q - 25)

Комментарии:

1. Только добавление int q; оставит его неинициализированным и вызовет проблемы во втором for цикле. int после int q = w; добавления этого должно быть удалено.

2. @MikeCAT можете ли вы объяснить, что вы имеете в виду?

3. Да, я должен был быть более ясным в своем ответе. Я отредактирую его так, чтобы он соответствовал вашему ответу выше.