此程序扫描输入文件中的数字。
在这种情况下,数字是: 23 353 626 五 14 25 86 95 44 47 55 26 三十 14 12 25 28 47 895 4255
用户可以选择显示任意数量的数字。
如果用户想要显示前3个数字,则应显示23,353和626。
以下代码不显示数字。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
void FillArray(FILE *fp, int n, int num[]);
int main()
{
FILE *fptr;
FILE *outPtr;
int num[20];
int i;
int number = 0;
int sum = 0;
fptr = fopen("numInput.txt", "r");
FillArray(fptr, number, num);
for (i = 0; i < number; i++)
{
printf("%d\n", num[i]);
}
for (i = 0; i < number; i++)
{
sum = sum + num[i];
}
outPtr = fopen("resOut.txt", "w");
fprintf(outPtr, "The Sum is %d", sum);
fclose(fptr);
fclose(outPtr);
return 0;
}
void FillArray(FILE *fp, int n, int num[])
{
int count = 0;
printf("How many number? ");
scanf("%d", &n);
for (count = 0; count < n; count++)
{
fscanf(fp, "%d", &num[count]);
}
}
答案 0 :(得分:0)
因为&#34;数字&#34;变量不能以这种方式重新定义。当您调用这样的函数时,您可以分配&#34; n&#34;局部函数变量n=number;
,内部函数&#34; n&#34;重新定义并在&#34; n&#34;的功能执行值之后被丢弃了。如果你想在函数中重新定义变量,你需要这样做:
1)作为返回值
int FillArray(FILE *fp, int num[]){
int n,count = 0;
printf("How many number? ");
scanf("%d", &n);
...
return n;
}
然后调用函数:
number = FillArray(fprt, num);
2)将指针传递给值
void FillArray(FILE *fp, int* n, int num[]){
int count = 0;
printf("How many number? ");
scanf("%d", n);
...
for (count = 0; count < *n; count++)
...
}
函数调用:
FillArray(fptr, &number, num);
编辑:Thx to Bodo。
答案 1 :(得分:0)
比较(在你的代码中):
int number = 0;
(由我评论)
FillArray(fptr, number, num); /* FillArray() will receive only COPIES of arguments */
for (i = 0; i < number; i++)
{
printf("%d\n", num[i]);
}
这个循环的主体会执行多少次?
(提示:函数FillArray()
无机会更改number
的值,因此它仍为0
。)
推荐修复(保证) - 基于使用指针到
number
:
void FillArray(FILE *, int *, int *); /* Insert explicit declaration in main() */
/* - only for my satisfaction ;-) */
FillArray(fptr, &number, num); /* &number instead of number */
void FillArray(FILE *fp, int *n, int num[]) /* *n instead of n */
scanf("%d", n); /* n instead of *n */
for (count = 0; count < *n; count++) /* *n instead of n */
(并考虑在提示"How many number? "
中使用复数)