显示输入文件中的项目

时间:2016-11-05 02:57:15

标签: c arrays

此程序扫描输入文件中的数字。

在这种情况下,数字是:     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]);
    }

}

2 个答案:

答案 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? "中使用复数