2015-02-19 3 views
0

У меня проблема при использовании этой программы perimetro (периметр). Я никогда не получаю правильное значение. Я всегда получаю сумасшедшие цифры.C Функция возвращает непредвиденные значения

Это мой код:

#include <stdio.h> 
#include <math.h> 
int perimetro(int v[][3] , int p); 
int main(){ 
int v[1][3]; 
int i,j,p; 
for (i=0;i<1;i++){ 
    for (j=0;j<3;j++){ 
     printf("Digite o tamanho de um dos lados do triangulo :"); 
     scanf("%d",&v[i][j]); 
    } 
    } 
perimetro(v,p); 
printf("O perimetro corresponde a : %d",p); 
return 0; 
} 



    int perimetro(int v[][3], int p) { 
p=0; 
p=p+v[0][0]+v[0][1]+v[0][2]; 
return p; 

}

+0

Пожалуйста, исправьте свой отступ. Спасибо! –

+2

Ваша проблема в том, когда вы вызываете функцию. он возвращает целое число, и вы не будете присваивать значение в любом месте. Просто присвойте значение функции p - 'p = perimetro (v, p);' –

+0

Как сказал @ user3195614, хотя есть еще одна проблема в том, что вы передаете неинициализированную переменную 'p' в качестве аргумента (значение не используется, но все же). Могу ли я рекомендовать всегда компилировать код с включенными предупреждениями? '-Wall' в GCC или CLang; проверьте руководство вашего компилятора для других поставщиков. –

ответ

2

Изменить

perimetro(v,p); 

Для

p=perimetro(v,p); 

Это сделано потому, что функция возвращает значение (периметр), но вы не хранили значение в любой переменной. Передача функции p функции и ее модификация не изменят ее значение в main. Это связано с тем, что C использует pass-by-value, и в этой функции находится копия переменной.

Лучшим способом сделать это будет либо передать адрес функции p, либо использовать указатель в качестве второго аргумента функции или передать один аргумент функции, так как значение второго аргумента не будет используется в функции.

Смежные вопросы