Operacje Bitowe w C - Pomoc

0

Witam. Na początku chce zaznaczyć że jestem nowy na tym forum. Mam zadanie stworzyć jak najprostszy program, zmieniający wybrany bit w C.
Oto co napisałem.

int a, i, u, s;
int work = 1;

void binary();

void main() {

printf("Podaj jakas liczbe dodatnia: \n");
scanf("%d", &a);
printf("Twoja liczba to:\n%d jako dziesientna:\n%x jako szesnastkowa: \n", a, a);
binary();
printf(" Twoja liczba w systemie binarnym:");

printf("\n1# - Zmienia wybrany bit na 1\n2# - Wyzerowanie bita\n3# - Odwraca wartosc bita\n4# - Wyswietla twoja obecna liczbe jako dziesietna, szesnastkowa oraz binarna\n5# - Zakonczenie dzialania programu\n");
while (work > 0) {
printf("\nCo chcesz zrobic? ");
scanf("%d", &s);
switch ("%d", s) {
case 1: printf("Ktory bit? ") ;//zmienia na 1
scanf("%d", &u);
--u;
a = a | (1 << u);
break;
case 2: printf("Ktory bit? "); //zeruje bit
scanf("%d", &u);
--u;
a = a & (~(1 << u));
break;
case 3: printf("Ktory bit? "); //odwraca bit
scanf("%d", &u);
--u;
a = a ^ (1 << u);
break;
case 4: printf("\n\Twoja liczba to:\n%d Jako dziesientna\n%x jako szesnastkowa \n ", a, a);
binary();
break;
case 5: work = 0; //wyjœcie
break;
default: break;

}
}

}

void binary() {

for (i = 15; i >= 0; i--) {
if (a & (1 << i)) {
printf("1");
} else {
printf("0");
}
}

}
 

Problem jest w tym że jak wybieram bit to do zmiany, to program wraca mi z powrotem do okna wyboru. Jakieś sugestie?
Z góry dziękuje za pomoc.

2
  1. Zapoznaj się z pojęciem formatowania kodu, naprawdę się opłaci
  2. Nigdy nie używaj i++ kiedy możesz użyć ++i bo ten brzydki nawyk ci się zemści
  3. Zacznij czytać to co do ciebie mówi kompilator, jeżeli nie rozumiesz to przynajmniej patrz uważnie na wiersz o którym mowa, np: switch ("%d", s) nic nie widzisz?
  4. Zapoznaj się z zasadą DRY, zauważ ze:
printf("Ktory bit? ") ; scanf("%d",&u); --u;

mogłeś bez problemu zrobić tylko raz przed pętlą w warunku if((1<=s)&&(s<=3))

 ewentualnie możesz zrobić z tego funkcję

1 użytkowników online, w tym zalogowanych: 0, gości: 1