我正在尝试使用函数将元素加载到数组中,但我不知道我做错了什么。我想从数据文件加载元素,直到输入-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;
}
答案 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;
}