0

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

#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
4

3 回答 3

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)您将获得一些有用的信息,说明文件未打开的原因。

于 2013-05-14T07:33:32.440 回答
1
  1. 您可能正在传递当前目录中不可用的文件。

  2. 以文件名作为参数给出有效的文件目录

  3. 在“fopen”之后检查 null

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

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

于 2013-05-14T07:42:55.057 回答
-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 是否在同一文件夹中或给出完整路径

于 2013-05-14T07:33:47.273 回答