2016-08-06 4 views
1

Я хочу сделать круговой счетчик в программировании на С. Первая переменная может хранить значение от 0 до 3. Вторая переменная запрашивает значение у пользователя (от 0 до 3). Третья переменная задает пользователю перемещаться влево или вправоКак реализовать круглый счетчик?

Если третья переменная остается вторая переменная должна двигаться влево:

3->2 
2->1 
1->0 
0->3 

Аналогично, если третья переменная правильно вторая переменная должна двигаться вправо:

0->1 
1->2 
2->3 
3->0 
+4

Можете ли вы опубликовать свои попытки реализовать это? – ameyCU

+0

И объясните, какую именно трудность у вас есть в отношении вашей попытки. – kaylum

+3

Подсчет: 'x = (x + 1) & 3', отсчет:' x = (x + 3) & 3' – Rotem

ответ

2
#include <stdio.h> 

int main(void) 
{ 
    int max = 3, num, i; 

    num = 0; 
    for (i = 0; i < 10; i++) { 
     printf("%d\n", num); 
     num = (num + 1) % (max + 1); 
    } 
    puts("--"); 
    num = max; 
    for (i = 0; i < 10; i++) { 
     printf("%d\n", num); 
     num = (max - -num) % (max + 1); 
    } 
    return 0; 
} 

Выход:

0 
1 
2 
3 
0 
1 
2 
3 
0 
1 
-- 
3 
2 
1 
0 
3 
2 
1 
0 
3 
2 
0

Если вы оберните силой в два, то эта техника будет работать.

#include <stdio.h> 

typedef struct 
{ 
    unsigned int x : 2; /* Holds up to 4 values */ 

} SmallInt; 


int main() 
{ 
    SmallInt up = {0}; 
    SmallInt down = {0}; 

    for (int z = 0; z < 10; z++) 
    { 
     printf("%d %d\n", up.x, down.x); 

     up.x++; 
     down.x--; 
    } 

    return 0; 
} 
+0

этот хороший метод! хорошее использование битового поля. – HuStmpHrrr

+0

Не в конце концов ли это переполнение? Разве x не увеличивается до одного байта, несмотря на обертывание значений, или я ошибаюсь? –

+0

@byteventurer Нет. Целое число имеет 2 бита, равное 8, поэтому он не обертывается из 3-> 0 и 0-> 3. – EvilTeach

Смежные вопросы