Advertisement
SetKaung

TwoPower

Apr 11th, 2024 (edited)
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. const int SUCCESS = 0;
  6. const int QUIT = 1;
  7. const int ERR = 2;
  8. const int NEGS = 3;
  9.  
  10. long twoPower(int expo)
  11. {
  12.     unsigned long result = 1;
  13.     for (int i = 1; i <= expo; i++)
  14.     {
  15.         result *= 2;
  16.     }
  17.     return result;
  18. }
  19.  
  20. int checkIfDigitsOnly(char *str)
  21. {
  22.     if (*str == '-')
  23.     {
  24.         return NEGS;
  25.     }
  26.     while (*str != '\0')
  27.     {
  28.         if ((*str >= '0' && *str <= '9'))
  29.         {
  30.             str++;
  31.             continue;
  32.         }
  33.         else
  34.         {
  35.             if (*str == 'q' && *(str + 1) == '\0')
  36.             {
  37.                 return QUIT;
  38.             }
  39.             else
  40.             {
  41.                 return ERR;
  42.             }
  43.         }
  44.     }
  45.     return SUCCESS;
  46. }
  47.  
  48. int getInput(char *inputBuffer, int bufferLength)
  49. {
  50.     printf("enter your exponent (max %d character): ", bufferLength - 1);
  51.     fgets(inputBuffer, bufferLength, stdin);
  52.     if (inputBuffer[strlen(inputBuffer) - 1] != '\n')
  53.     {
  54.         int dropped = 0;
  55.         while (fgetc(stdin) != '\n')
  56.         {
  57.             dropped++;
  58.         }
  59.  
  60.         if (dropped > 0)
  61.         {
  62.             printf("the input is over the limit by %d characters. try again!\n", dropped);
  63.             return ERR;
  64.         }
  65.     }
  66.     else
  67.     {
  68.         inputBuffer[strlen(inputBuffer) - 1] = '\0';
  69.     }
  70.     int check = checkIfDigitsOnly(inputBuffer);
  71.     if (check == ERR)
  72.     {
  73.         printf("the input contains non-digits. try again!\n");
  74.         return ERR;
  75.     }
  76.     else if (check == QUIT)
  77.     {
  78.         printf("\n \t Bye :) \n");
  79.         return QUIT;
  80.     }
  81.     else if (check == NEGS)
  82.     {
  83.         printf("only non-negative numbers are allowed!\n");
  84.         return NEGS;
  85.     }
  86.     else
  87.     {
  88.         int out = atoi(inputBuffer);
  89.         if (out > 63)
  90.         {
  91.             printf("Not allowed value over 63 \n");
  92.             return ERR;
  93.         }
  94.         printf("2^%d = %lu \n", out, twoPower(out));
  95.         return SUCCESS;
  96.     }
  97. }
  98.  
  99. int main()
  100. {
  101.     char input[3] = "";
  102.     int status = SUCCESS;
  103.     while (status != QUIT)
  104.     {
  105.         status = getInput(input, 3);
  106.         printf("\n");
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement