Untitled
unknown
plain_text
a year ago
2.6 kB
9
Indexable
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define ZERO '0'
#define ONE '1'
#define SPACE ' '
typedef char* string;
void getBinary(int a);
int main(){
string intro = "Bit Handling Operations\n";
string numInputPrompt = "Please input an integer (0-255): ";
string commandMenu = "\n--------------------------\n"
"Operations\n--------------------------\n"
"L: Left-shift\nR: Right-shift\nC: Complement\n"
"E: End program\n--------------------------\n"
"Please select operation: ";
string outputTemplate = "Decimal: %d, Hexadecimal: %X; Binary: ";
string numError = "Not numeric or out of range!";
string commandError = "Invalid selection!\n";
int exit = 0;
unsigned char numInput = 0;
static int storeVal;
char commandInput;
char ch;
int isValidInput = 1;
printf("%s", intro);
printf("%s", numInputPrompt);
int digitCount = 0; // To count the number of digits in the input
while ((ch = getchar()) != '\n') {
if (isdigit(ch)) {
numInput = numInput * 10 + (ch - '0');
digitCount++;
if (numInput > 255) {
isValidInput = 0;
break;
}
} else {
isValidInput = 0;
break;
}
}
// Detect if input is just '\n' or non-numeric, or out of range
if (!isValidInput || digitCount == 0) {
printf("%s\n", numError);
return 1; // Exit the program due to invalid input
}
storeVal = numInput;
while(exit != 1){
printf("%s", commandMenu);
commandInput = getchar();
fflush(stdin);
switch(commandInput){
case 'L':
storeVal = (storeVal << 1) & 0xFF;
printf(outputTemplate, storeVal, storeVal);
getBinary(storeVal);
break;
case 'R':
storeVal >>= 1;
printf(outputTemplate, storeVal, storeVal);
getBinary(storeVal);
break;
case 'C':
storeVal = ~storeVal;
printf(outputTemplate, storeVal, storeVal);
getBinary(storeVal);
break;
case 'E':
exit = 1;
break;
default:
printf("%s", commandError);
break;
}
}
}
void getBinary(int a){
int n = 8;
int mask = 1 << (n-1);
int i;
for (i=1; i<=n; i++){
putchar (a & mask ? ONE : ZERO);
a <<= 1;
}
}Editor is loading...
Leave a Comment