lodam
lodam

Reputation: 77

C Program - pointer array multiplication

This program is supposed to take 2 arrays and perform the dot product on each of the elements in the array.

My program is fine if the index of n is less than 5; however, once the index of the array is greater than 5 only the first element in the first array is wrong ( I checked by adding a printf statement in the function). I don't know how to fix this bug.

#include <stdio.h>

void multi_vec(int *v1, int *v2, int *v3, int n);
int main(void)
{
    int n, i;
    int v1[n];
    int v2[n];
    int v3[n];
    printf("Enter the length of the two vectors\n");
    scanf("%d", &n);
    printf("Enter numbers for the first array\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &v1[i]);
    }
    printf("Enter numbers for the second array\n", n);
    for (i = 0; i < n; i++) {
         scanf("%d", &v2[i]);
    }

    multi_vec(v1, v2, v3, n);

    for (i = 0; i < n; i++) {
        printf("%d", v3[i]);
    }
    printf("\n");
    return 0;
}

void multi_vec(int *v1, int *v2, int *v3, int n)
{
    int i;
    for (i = 0; i < n; i++) {
        *(v3+i) = *(v1+i) * *(v2+i);
    }
}

Upvotes: 0

Views: 3683

Answers (1)

Sourav Datta
Sourav Datta

Reputation: 83

Correct code

#include <stdio.h>

void multi_vec(int *v1, int *v2, int *v3, int n);
int main(void)
{
    int n, i;
    printf("Enter the length of the two vectors\n");
    scanf("%d", &n);
    int v1[n],v2[n],v3[n];     //you didn't initialize n
    printf("Enter numbers for the first array\n");    //printf statements had extra ',n'

    for (i = 0; i < n; i++) {
        scanf("%d", &v1[i]);
    }
    printf("Enter numbers for the second array\n");    //printf statements had extra ',n'
    for (i = 0; i < n; i++) {
         scanf("%d", &v2[i]);
    }

    multi_vec(v1, v2, v3, n);

    for (i = 0; i < n; i++) {
        printf("%d ", v3[i]);
    }
    printf("\n");
    return 0;
}

void multi_vec(int *v1, int *v2, int *v3, int n)
{
    int i;
    for (i = 0; i < n; i++) {
        *(v3+i) = *(v1+i) * *(v2+i);
    }
}

Upvotes: 1

Related Questions