我无法将数据读入数组

时间:2013-05-14 07:25:11

标签: c

我正在尝试从文本文件中读取数据并将它们复制到数组中,但我的代码不起作用。这是代码:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i;

    FILE *data;
    data = fopen(argv[1], "r");

    .......

    fclose(data);
}

当我更换

data = fopen(argv[1], "r");`

data = fopen("(the file name)", "r");

它有效。

这是完整的代码

#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
i=0;
FILE *data;
data = fopen(argv[1], "r");

while (!feof(data)) {
    fscanf(data, "%i", &aa[i]);
    i++;
}

fclose(data);
printf("%i\n", aa[0]);
}

,文本文件为

3
2 1
2 2
2 3

3 个答案:

答案 0 :(得分:3)

您应该始终为可能合理失败的任何内容编写基本的错误检查代码,例如:

#include <stdio.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    int i;
    FILE *data;

    if (argc < 2)
    {
        fprintf(stderr, "Missing arguments: %s\n", usage);
        exit(1);
    }

    data = fopen(argv[1], "r");
    if (data == NULL)
    {
        fprintf(stderr, "fopen('%s') failed, errno = %d, argv[1], errno);
        exit(2);
    }

    .......

    fclose(data);

    return (0);
}

这样,如果fopen失败,那么(a)你不会崩溃,(b)你会得到一些有用的信息为什么文件没有被打开。

答案 1 :(得分:1)

  1. 您可能正在传递当前目录中不可用的文件。

  2. 将有效文件目录的文件名作为参数

  3. 在'fopen'

  4. 之后检查是否为空

    使用gcc -g -Wall main.c编译

    并使用gdb调试器来识别错误

答案 2 :(得分:-1)

您应该在运行代码时传递文件名。

./a.out file.txt.

如果file.txt不存在,则会将错误视为分段错误。

试试这个代码,它的工作

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i;
    int j = 0;
    int aa[100];    //declare an int array to store the data, as you are retrieving using %i
    i=0;
    FILE *data;
    data = fopen(argv[1], "r");

    while (!feof(data)) {
        fscanf(data, "%i", &aa[i]);
        i++;
    }
    i--;
    fclose(data);
    for(j; j < i; j++)
        printf("%i\n", aa[j]);
}

在file.txt中提供您提供的任何数据。

并且在运行 ./ a.out file.txt

时传递

确保 file.txt位于同一文件夹或提供完整路径