我是编程的初学者。什么是细分错误,以及如何在以下程序中删除该错误?
以下是在hackerrank中询问的三胞胎问题的比较。尝试运行程序时收到分段错误。
int main() {
int a, b, c;
c = points(a, b);
printf("%d", c);
return 0;
}
int points(int a[10], int b[10]) {
int p = 0, q = 0;
for (int i = 0; i < 3; i++) {
printf("%d", a[i]);
scanf("%d", & a[i]);
}
for (int j = 0; j < 3; j++) {
printf("%d", b[j]);
scanf("%d", & b[j]);
}
for (int k = 0; k < 3; k++) {
if (a[k] > b[k]) {
++p;
return p;
} else {
if (a[k] = b[k])
++q;
return q;
}
}
return 0;
}
答案 0 :(得分:3)
int a,b,c;
c=points(a,b);
您正在将参数传递给函数而未设置其值。请记住,在C语言中,您是按值将参数传递给函数。
int points(int a[10],int b[10])
此函数需要两个十个整数的数组。每个变量只传递一个整数。
您还应该阅读有关将数组参数传递给函数的信息(如果您打算这样做)。在C语言中,除非将整个数组包装为结构,否则无法将其传递给函数。您应该只传递第一个数组元素的地址,并以某种方式定义大小。例如:
#define ARRAY_SIZE 10
int foo(int tab[])
{
int i;
for (i = 0; i < ARRAY_SIZE; i++)
tab[i] = do_stuff();
}
int main(void)
{
int tab[ARRAY_SIZE];
foo(tab);
}
您也不能定义ARRAY_SIZE宏,而是将另一个参数传递给将定义所传递数组大小的函数。