我正在尝试从文本文件中读取数据并将它们复制到数组中,但我的代码不起作用。这是代码:
#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
答案 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)
您可能正在传递当前目录中不可用的文件。
将有效文件目录的文件名作为参数
在'fopen'
使用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位于同一文件夹或提供完整路径