使用函数加载数组元素

时间:2015-11-15 17:16:25

标签: c arrays function

我正在尝试使用函数将元素加载到数组中,但我不知道我做错了什么。我想从数据文件加载元素,直到输入-1。这是我所拥有的,我不知道该怎么做。

#include <stdio.h>

/*Function to scan in grades*/
int LoadArray (int grade[ ])
{
    int i = 0;
    while(scanf("%i", grade[i]) != -1) {
        i++;
    }
    return i;
}


/*Main program*/
int main (void)
{
    int grade[200], count=0;
    /*Call function*/
    count = LoadArray(grade);
    printf("%i", count);
    return 0;

}

2 个答案:

答案 0 :(得分:2)

两个问题。

1)你错过了&符号:

scanf("%i", &grade[i]);

你需要传递变量scanf地址应该把结果放进去。你传递的是grade[i]的内容,读取未初始化的内存是未定义的行为

2)scanf不会返回从stdin读取的值;你应该将你读到的变量与-1进行比较。另外,将数组传递给函数但不是它的大小是不好的做法,因为函数无法知道数组的大小。

总而言之,带有修复程序的代码如下所示:

/*Function to scan in grades*/
int LoadArray(int grade[], size_t gradeMaxCount)
{
    int i = 0;

    while (1)
    {
        int tmp;
        if (i >= gradeMaxCount || scanf("%i", &tmp) != 1 || tmp == -1)
            break;

        grade[i++] = tmp;
    }

    return i;
}

像这样调用函数:

count = LoadArray(grade, sizeof(grade) / sizeof(grade[0]));

请注意,如果i以某种方式变为负面,则会发生有趣的事情。您可以改为size_t(这也需要您更改函数返回类型并使用%zu打印),具体取决于您的纯粹主义者的数量。

答案 1 :(得分:-1)

int LoadArray (int grade[ ])
{
    int i = 0;
    for(int j=0;j<200;j++){
       if((scanf("%d", grade+j) == -1) || (grade[j]==-1))
            break;

        i++;
    }
    return i;
}