// Convert a positive decimal integer to a number of base (2 to 16) // Also a good example for using do ... while() to check input // tested with Pelles C vegaseat 1dec2004 #include <stdio.h> char *conv_base(long number, int base); int main() { int base; long number; char yn; do { do { printf("\n\nEnter an integer number : "); scanf("%ld",&number); } while (number < 1); // positive integers only do { printf("\nEnter the base (2-16) : "); scanf("%d",&base); } while (base < 2 || base > 16); // stay in range printf("\nThe converted number is : %s",conv_base(number,base)); printf("\n\n Any more (y/n) : "); getchar(); // a little goofy but needed yn = getchar(); } while (!(yn == 'n' || yn == 'N')); return 0; } char *conv_base(long number, int base) { long remain; int n = 0, k = 0; static char temp[32], result[32]; static char *digit = "0123456789ABCDEF"; // list of digits do { remain = number % base; // modulo gets remainder number = number / base; // whittle down number temp[k++] = digit[remain]; } while (number > 0); while (k >= 0) { result[n++] = temp[--k]; // spell forward } result[n-1] = 0; // add string EOS return (result); }