#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. Да, я должен был быть более ясным в своем ответе. Я отредактирую его так, чтобы он соответствовал вашему ответу выше.