Este es un programa simple para rotar bits, el caso del interruptor se usa para definir si el usuario quiere una rotación hacia la izquierda o hacia la derecha después de obtener el bit más significativo o el bit menos significativo, según la elección que usé para el bucle en el lado del interruptor y usé los mismos valores y ejecuta todos los casos sin importar lo que ingresé.
#include <stdio.h> #define SIZE sizeof(number)*8 void main() { int number, rotate, i, SB, numberr; char choice; puts("simple program to rotate bits of a number"); printf("If you want right rotation type 'R'\n"); printf("enter your number : "); scanf("%d", &number); printf("Enter how much time you want to rotate : "); scanf("%d", &rotate); getchar(); printf("IF you want left rotation type 'L' : "); scanf("%c", &choice); switch(choice) { case 'l' : case 'L' : SB = (1<<(SIZE-1))&1; for(i=0;i<rotate;i++) { numberr = (number << 1) | SB; printf("\n%d after being rotated %d times became %d\n\n", number, rotate, numberr); } break; case 'r' : case 'R' : SB = number & 1; for(i=0;i<rotate;i++) { numberr = (number >> 1) | SB; printf("\n%d after being rotated %d time became %d\n\n", number, rotate, numberr); } break; default : printf("please chose either R or L\n\n"); } }He refinado tu código y esto podría ayudar. Es posible que desee mejorar la sintaxis de su código antes de publicar la pregunta.
#include <stdio.h> #define SIZE 32 int main() { int number, rotate, i, number1; char choice; int output; puts("simple program to rotate bits of a number"); printf("enter your number : "); scanf("%d", &number); printf("Enter how much time you want to rotate : "); scanf("%d", &rotate); printf("If you want right rotation type 'R'\n"); printf("IF you want left rotation type 'L' : "); scanf(" %c", &choice); switch(choice) { case 'l' : case 'L' : output = (number << rotate) | (number >> (SIZE - rotate)); printf("%d after rotating %d times became %d,",number,rotate,output); break; case 'r' : case 'R' : output = (number >> rotate) | (number << (SIZE - rotate)); printf("%d after rotating %d times became %d,",number,rotate,output); break; default : printf("Please choose either R or L\n\n"); } return 0; }El resultado es confuso porque los mensajes de cada case están redactados de manera idéntica. Cuando agregué L y R al mensaje, mostró que solo se ejecuta un case .
El problema es que la salida está dentro del bucle y debe moverse fuera, por ejemplo
case 'l' : case 'L' : SB = (1<<(SIZE-1))&1; for(i=0;i<rotate;i++) { numberr = (number << 1) | SB; } printf("L %d after being rotated %d times became %d\n\n", number, rotate, numberr); break;