使用文件处理从文件中读取整数并在数组中显示数据

时间:2015-12-16 11:43:36

标签: c

# include <stdio.h>

main()
{
    FILE *fp;
    int a[10], n, i;
    char file_name[20];

    printf("enter the file name \n");
    scanf("%s", file_name);
    printf("enter number of integers \n");
    scanf("%d", &n);
    fp = fopen(file_name, "rb");
    if (fp == NULL) {
        printf("Error in opening file \n");
        return;
    }
    fread(a, 1, n, fp);
    for (i = 0; i < n; i++) {
        printf("%d \n", a[i]);
    }
}

输出:

输入文件名/home/n/t1.txt输入整数 3 1540736144 1540736144 1540736144 ..

在文件t1.txt中,我输入了整数{10,20,30,40.50} 并存储在路径/home/n/t1.txt ..

但是在输出中它显示了一些垃圾地址.. 请指导我如何显示存储在文件中的整数..

1 个答案:

答案 0 :(得分:1)

您的文件是文本文件,是人类可读的,可以在文本编辑器中进行编辑。您将其视为二进制文件,它以与存储在内存中相同的方式存储数据。这些文件结构紧凑,阅读速度快,但人类不易编辑或阅读。

C标准提供了处理这些文件类型的不同功能。 fwritefread用于二进制文件。 fprintffscanffgets等用于文本文件。

有几种方法可以解析您的输入,而SO则充满了示例。一种廉价的数据读取方式是fscanf。它忽略了新线条,只是将它们视为空白区域。如果您有更复杂的数据或需要良好的错误处理,这不是读取输入的好方法,但对于您的小例子,它会这样做。您的输入似乎没有按行组织。

下面的代码定义了函数scan_int,它从文件中读取多个整数。 main函数显示了如何使用此函数。

#include <stdlib.h>
#include <stdio.h>

/*
 *      Read at most max integers from a file and store them in arr.
 *      Return the number of integers read or -1 on file access error.
 *      Numbers may or may not be separated with commas.
 */
int scan_int(const char *fn, int arr[], int max)
{
    FILE *f = fopen(fn, "r");
    int n = 0;

    if (f == NULL) return -1;

    while (n < max && fscanf(f, "%d,", &arr[n]) == 1) n++;
    fclose(f);

    return n;
}

int main(void)
{
    int a[10];
    int i, n;

    n = scan_int("data.txt", a, 10);

    for (i = 0; i < n; i++) {
        if (i) printf(", ");
        printf("%d", a[i]);
    }
    printf("\n");

    return 0;
}