You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
4.3 KiB
C

#include <stdio.h>
#include <string.h>
#include "my_funcs.h"
int scan_array(void * p_array, size_t size, char * specifier)
{
int scan_el_cnt = 0;
size_t spec_size = strlen(specifier);
if (spec_size == 1)
{
switch (specifier[0])
{
case 'c':
{
for (unsigned int i = 0; i < size; i++)
{
if (scanf("%c", ((char *) p_array) + i))
scan_el_cnt++;
}
} break;
case 'd':
{
for (unsigned int i = 0; i < size; i++)
{
if (scanf("%d", ((int *) p_array) + i))
scan_el_cnt++;
}
} break;
case 'f':
{
for (unsigned int i = 0; i < size; i++)
{
if (scanf("%f", ((float *) p_array) + i))
scan_el_cnt++;
}
} break;
}
}
else if (spec_size == 2)
{
if (specifier[0] == 'l')
{
switch (specifier[1])
{
case 'd':
{
for (unsigned int i = 0; i < size; i++)
{
if (scanf("%ld", ((long *) p_array) + i))
scan_el_cnt++;
}
} break;
case 'f':
{
for (unsigned int i = 0; i < size; i++)
{
if (scanf("%lf", ((double *) p_array) + i))
scan_el_cnt++;
}
} break;
}
}
}
return scan_el_cnt;
}
int print_array(void * p_array, size_t size, char * specifier)
{
size_t spec_size = strlen(specifier);
if (spec_size > 1 && specifier[0] == '%')
{
switch (specifier[1])
{
case 'c':
{
char * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
printf(specifier, new_p[i]);
} break;
case 'd':
case 'x':
case 'X':
{
int * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
printf(specifier, new_p[i]);
} break;
case 'f':
{
float * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
printf(specifier, new_p[i]);
} break;
case 'e':
{
double * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
printf(specifier, new_p[i]);
} break;
case 'l':
{
if (spec_size > 2)
{
switch (specifier[2])
{
case 'd':
case 'x':
case 'X':
{
long * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
printf(specifier, new_p[i]);
} break;
case 'f':
{
double * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
printf(specifier, new_p[i]);
} break;
}
}
} break;
default:
return 0;
}
}
else
return 0;
printf("\n");
return 1;
}
void print_array_table(void * p_array, size_t size, char * specifier, int colomn)
{
size_t spec_size = strlen(specifier);
if (spec_size == 1 && specifier[0] == 'e')
{
float * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
{
for (int j = 0; j < colomn; i++)
{
if (i + j + 2 > size)
return;
printf("%5e ", new_p[i]);
}
printf("\n");
}
}
else if (spec_size == 2 && specifier[0] == 'l' && specifier[1] == 'd')
{
long * new_p = p_array;
for (unsigned int i = 0; i < size; i++)
{
for (int j = 0; j < size / colomn; j++)
{
if (i + j + 1 > size)
return;
printf("%10ld ", *(new_p + i + j));
}
printf("\n");
}
}
printf("\n");
}