#include <stdio.h>
typedef enum { Integer, Double } type;
void fill(type type, void *array, int size){
int i;
for(i=0;i<size;i++){
if(type == Integer)
scanf("%d", ((int*)array) + i);
else
scanf("%lf", ((double*)array) + i);
}
}
int main(void){
double dd[3];
int id[3];
int i;
fill(Double, dd, 3);
for(i=0;i<3;++i)
printf("%f\n", dd[i]);
fill(Integer, id, 3);
for(i=0;i<3;++i)
printf("%d\n", id[i]);
return 0;
}
宏版本
#include <stdio.h>
enum { _int, _double };
#define type(x) _##x
#define FILL(T, A, S) do{ char *table[] = {"%d", "%lf" };int i; for(i=0;i<S;++i){scanf(table[type(T)], &A[i]);}}while(0)
int main(void){
double dd[3];
int id[3];
int i;
FILL(double, dd, 3);
for(i=0;i<3;++i)
printf("%f\n", dd[i]);
FILL(int, id, 3);
for(i=0;i<3;++i)
printf("%d\n", id[i]);
return 0;
}