2015-10-04 3 views
0

Эта программа должна принимать 2 массива и выполнять точечный продукт для каждого из элементов массива.C Программа - умножение массива указателей

Моя программа прекрасна, если индекс n меньше 5; однако, как только индекс массива будет больше 5, только первый элемент в первом массиве ошибочен (я проверил добавлением инструкции printf в функцию). Я не знаю, как исправить эту ошибку.

#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); 
    } 
} 
+2

'n' является unintilaized http://rextester.com/AJDX1741 – P0W

+0

Int v1 [п] illegal.even если п инициализируется –

+1

@ machine_1: Вы больше C++ человек, не так ли? VLA в порядке. – EOF

ответ

1

Правильный код

#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); 
    } 
} 
Смежные вопросы