Как использовать статические переменные в циклах for для поддержания значения в нескольких циклах в C

#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. фактически неточно