#include
#include
#include
const int SUCCESS = 0;
const int QUIT = 1;
const int ERR = 2;
const int NEGS = 3;
long twoPower(int expo)
{
unsigned long result = 1;
for (int i = 1; i <= expo; i++)
{
result *= 2;
}
return result;
}
int checkIfDigitsOnly(char *str)
{
if (*str == '-')
{
return NEGS;
}
while (*str != '\0')
{
if ((*str >= '0' && *str <= '9'))
{
str++;
continue;
}
else
{
if (*str == 'q' && *(str + 1) == '\0')
{
return QUIT;
}
else
{
return ERR;
}
}
}
return SUCCESS;
}
int getInput(char *inputBuffer, int bufferLength)
{
printf("enter your exponent (max %d character): ", bufferLength - 1);
fgets(inputBuffer, bufferLength, stdin);
if (inputBuffer[strlen(inputBuffer) - 1] != '\n')
{
int dropped = 0;
while (fgetc(stdin) != '\n')
{
dropped++;
}
if (dropped > 0)
{
printf("the input is over the limit by %d characters. try again!\n", dropped);
return ERR;
}
}
else
{
inputBuffer[strlen(inputBuffer) - 1] = '\0';
}
int check = checkIfDigitsOnly(inputBuffer);
if (check == ERR)
{
printf("the input contains non-digits. try again!\n");
return ERR;
}
else if (check == QUIT)
{
printf("\n \t Bye :) \n");
return QUIT;
}
else if (check == NEGS)
{
printf("only non-negative numbers are allowed!\n");
return NEGS;
}
else
{
int out = atoi(inputBuffer);
if (out > 63)
{
printf("Not allowed value over 63 \n");
return ERR;
}
printf("2^%d = %lu \n", out, twoPower(out));
return SUCCESS;
}
}
int main()
{
char input[3] = "";
int status = SUCCESS;
while (status != QUIT)
{
status = getInput(input, 3);
printf("\n");
}
}