#c #static
#c #статические
Вопрос:
Я пишу код для решения головоломки mastermind с использованием 4 цветов и 4 привязок, это выдержка из кода, с которым у меня возникли проблемы. Проблема, с которой я сталкиваюсь, заключается в том, что при повторном выполнении цикла он начинается со значений num1, 2, 3, 4, которые не меняются, и поэтому я возвращаю «r, r, r, r» в конце каждого цикла. Я пытаюсь использовать статическую переменную, чтобы исправить это:
int readOK = 0;
while (readOK == 0)
{
static int num1 = 0;
static int num2 = 0;
static int num3 = 0;
static int num4 = 0;
int count = 0;
for (num1 = 0; num1 <= 3; num1 )
for (num2 = 0; num2 <= 3; num2 )
for (num3 = 0; num3 <= 3; num3 )
for (num4 = 0; num4 <= 3; num4 )
{
if (num1 == 0)
{
return 'r';
}
if (num1 == 1)
{
return 'g';
}
if (num1 == 2)
{
return 'b';
}
if (num1 == 3)
{
return 'y';
}
if (num2 == 0)
{
return 'r';
}
if (num2 == 1)
{
return 'g';
}
if (num2 == 2)
{
return 'b';
}
if (num2 == 3)
{
return 'y';
}
if (num3 == 0)
{
return 'r';
}
if (num3 == 1)
{
return 'g';
}
if (num3 == 2)
{
return 'b';
}
if (num3 == 3)
{
return 'y';
}
if (num4 == 0)
{
return 'r';
}
if (num4 == 1)
{
return 'g';
}
if (num4 == 2)
{
return 'b';
}
if (num4 == 3)
{
return 'y';
}
count ;
}
Комментарии:
1. у ваших переменных есть
static
продолжительность хранения, но вы инициализируете их0
в начале каждого цикла (for (num1 = 0;...
). Не совсем понятно, чего вы пытаетесь достичь на данный момент, хотя, с моей точки зрения, нет веских причин использоватьstatic
в вашем коде2. В коде, который вы показываете здесь, наличие
static
или отсутствие для вашихnumX
переменных ничего не меняет, потому что, например,for (num1 = 0;...)
все равно начнет цикл сnum1
инициализированным нулем.3. Трудно понять, решает ли мой ответ вашу проблему, не видя, как это вписывается в вашу программу.
4. Возможно, здесь у нас проблема XY .
Ответ №1:
Чтобы static
работать так, как, я думаю, вы ожидаете, это должно быть объявлено внутри функции. Тогда при каждом вызове функции static
переменная будет сохранять последнее значение, которое она имела в конце предыдущего вызова функции.
Когда static
используется для глобальной переменной, это просто ограничивает использование переменной этим файлом.
https://www.tutorialspoint.com/cprogramming/c_storage_classes.htm
Ответ №2:
ключевое слово static можно использовать только в функциях.. не в циклах
Комментарии:
1. фактически неточно