I wrote a program that implements an algorithm that converts from decimal to binary and octal
Please criticize my implementation. What else can I do to improve?
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
int n, option, flagOctal;
int a[100];
void baseConversion10Base2(long long x){
int D = 0;
while(x){
a[++D] = abs(x % 2);
x /= 2;
}
for(int i = D; i > 0; i--)
printf("%d", a[i]);
}
void baseConversion10Base8(long long nrDecimal)
{
int D = 0;
while(nrDecimal){
a[++D] = abs(nrDecimal % 8);
nrDecimal /= 8;
}
for(int i = D; i > 0; i--)
printf("%d", a[i]);
}
int main(int argc, char **argv)
{
if(argc == 1)
{
printf("No arguments were entered");
return 0;
}
else
if(argc == optind)
{
printf("Only optional parameters have been entered");
return 0;
}
else
{
opterr = 0;
while((option = getopt(argc, argv, "o")) != -1){
switch(option){
case 'o':
flagOctal = 1;
break;
default:
;
}
}
if(optind == argc)
{
printf("Only optional parameters have been entered");
return 0;
}
printf("Positive numbers converted to ");
if(flagOctal == 1) printf("octal: "); else printf("binar: ");
for(int i = optind; i < argc; i++)
{
if(strcmp(argv[i], "0") == 0)
{
printf("0");
continue;
}
char *a = argv[i];
long long nr = atol(a);
if(nr == 0)
printf("X ");
else
{
if(flagOctal == 1)
{
baseConversion10Base8(nr);
printf(" ");
}
else
{
baseConversion10Base2(nr);
printf(" ");
}
}
}
printf("\nNegative numbers converted to ");
if(flagOctal == 1) printf("octal: "); else printf("binar: ");
for(int i = 1; i < optind; i++)
{
char *a = argv[i];
long long nr = atol(a);
if(nr < 0)
{
printf("-");
if(flagOctal == 1)
baseConversion10Base8(abs(nr));
else
baseConversion10Base2(abs(nr));
printf(" ");
}
}
}
printf("\n");
return 0;
}
conversieBaza10Baza8
? \$\endgroup\$