Advertisement
BladeMechanics

ISBN-10

Feb 5th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.99 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<ctype.h>
  4. #include<stdlib.h>
  5.  
  6. void menu();
  7. int checkdigit(int *);
  8. void strint(char *, int *);
  9.  
  10. void main()
  11. {
  12.     menu();
  13. }
  14.  
  15. void strint(char *input, int *output) //string to int array
  16. {
  17.     for (int index = 0; index<9; index++)
  18.     {
  19.         if (isdigit(input[index]))
  20.         {
  21.             output[index] = input[index] - '0';
  22.         }
  23.         else
  24.         {
  25.             printf("\n\nInvalid input, nondigit character detected");
  26.             break;
  27.         }
  28.     }
  29. }
  30.  
  31. int checkdigit(int *input)
  32. {
  33.     int sum = 0;
  34.     for (int index = 0; index<9; index++)
  35.     {
  36.         sum += (index + 1)*input[index];
  37.     }
  38.     return sum % 11;
  39. }
  40.  
  41. void menu()
  42. {
  43.     char cinput[12];
  44.     int output[12];
  45.     int choice = 1;
  46.     do {
  47.         system("cls");
  48.         printf("\n\t\t\tPlease choose an option;\n\n");
  49.         printf("\t\t1.\tGenerate an ISBN-10 check digit\n");
  50.         printf("\t\t2.\tValidate an ISBN-10\n\n");
  51.         printf("\t\t0.\tExit program\n\n\t\t");
  52.         scanf_s("%d", &choice);
  53.         getchar();
  54.         switch (choice)
  55.         {
  56.         case 1:
  57.             system("cls");
  58.             printf("\n\t\tEnter the 9 digit partial ISBN-10:\n\t\t");
  59.             fgets(cinput, 10, stdin);
  60.             strint(cinput, output);
  61.  
  62.             printf("\n\n\t\tThe checkdigit for %9s is %c", cinput, checkdigit(output)<10 ? checkdigit(output) +'0':'X');
  63.             printf("\n\t\tPress any key to continue");
  64.             _getch();
  65.             break;
  66.         case 2:
  67.             system("cls");
  68.             printf("\n\t\tEnter ISBN-10 for validation:\n\t\t");
  69.             fgets(cinput, 11, stdin);
  70.             if (cinput[9] == 'X' || cinput[9] == 'x')
  71.             {
  72.                 cinput[9] = '1';
  73.                 cinput[10] = '0';
  74.                 cinput[11] = '\0';
  75.             }
  76.             strint(cinput, output);
  77.             if (checkdigit(output) == atoi(&cinput[9]))
  78.                 printf("\n\n\t\tThe ISBN-10 is valid. \n\t\tActual Check Digit %2d = %c",checkdigit(output), atoi(&cinput[9])<10? atoi(&cinput[9])+'0':'X');
  79.             else printf("\n\n\t\tThe ISBN-10 is invalid. \n\t\tActual Check Digit %2d =/= %c", checkdigit(output), atoi(&cinput[9])<10 ? atoi(&cinput[9]) + '0' : 'X');
  80.             printf("\n\t\tPress any key to continue");
  81.             _getch();
  82.             break;
  83.         }
  84.     } while (choice);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement