void pointer and Casting

Code

#include <stdio.h>

void sum_int (void *a, void *b){
    int sum_int;
    printf("%d", sum_int = *(int *)a + *(int *)b);
}

void sum_float (void *a, void *b){
    float sum_float;
    printf("%0.1f", sum_float = *(float *)a + *(float *)b);
}

void (*func_ptr[2])(void *, void *) = {sum_int, sum_float};

void add_and_print(void *a, void *b, char type) {
    // Write your logic here using type casting
    if (type == 'i'){
        (*func_ptr[0])(a, b);
    } else (*func_ptr[1])(a, b);
}

int main() {
    char type;
    scanf(" %c", &type);

    if (type == 'i') {
        int x, y;
        scanf("%d %d", &x, &y);
        add_and_print(&x, &y, type);
    } else if (type == 'f') {
        float x, y;
        scanf("%f %f", &x, &y);
        add_and_print(&x, &y, type);
    }

    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

i 10 20

Expected Output

30