C 我能';t将数据读入数组
我试图从文本文件中读取数据并将其复制到数组中,但我的代码不起作用。代码如下:C 我能';t将数据读入数组,c,C,我试图从文本文件中读取数据并将其复制到数组中,但我的代码不起作用。代码如下: #include <stdio.h> int main(int argc, char *argv[]) { int i; FILE *data; data = fopen(argv[1], "r"); ....... fclose(data); } 与 它起作用了 这是完整的代码 #include <stdio.h> int main(int ar
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
FILE *data;
data = fopen(argv[1], "r");
.......
fclose(data);
}
与
它起作用了
这是完整的代码
#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]);
}
您应该始终编写基本的错误检查代码,以检查任何可能合理失败的内容,例如:
#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);
}
#包括
#包括
int main(int argc,char*argv[])
{
int i;
文件*数据;
如果(argc<2)
{
fprintf(stderr,“缺少参数:%s\n”,用法);
出口(1);
}
数据=fopen(argv[1],“r”);
如果(数据==NULL)
{
fprintf(stderr,“fopen(“%s”)失败,错误号=%d,argv[1],错误号);
出口(2);
}
.......
fclose(数据);
返回(0);
}
这样,如果
fopen
失败,那么(a)您将不会崩溃,(b)您将获得一些关于文件未打开原因的有用信息。您应该始终为任何可能合理失败的内容编写基本错误检查代码,例如:
#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);
}
#包括
#包括
int main(int argc,char*argv[])
{
int i;
文件*数据;
如果(argc<2)
{
fprintf(stderr,“缺少参数:%s\n”,用法);
出口(1);
}
数据=fopen(argv[1],“r”);
如果(数据==NULL)
{
fprintf(stderr,“fopen(“%s”)失败,错误号=%d,argv[1],错误号);
出口(2);
}
.......
fclose(数据);
返回(0);
}
这样,如果
fopen
失败,则(a)您不会崩溃,(b)您将获得一些关于文件未打开原因的有用信息。您应该在运行代码时传递文件名
./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]);
}
#包括
int main(int argc,char*argv[])
{
int i;
int j=0;
int aa[100];//声明一个int数组来存储数据,因为您正在使用%i进行检索
i=0;
文件*数据;
数据=fopen(argv[1],“r”);
而(!feof(数据)){
fscanf(数据,“%i”和aa[i]);
i++;
}
我--;
fclose(数据);
对于(j;j
在file.txt中,提供您提供的任何数据
运行pass/a.out file.txt时
确保file.txt在同一个文件夹中或给出整个路径运行代码时应传递文件名
./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]);
}
#包括
int main(int argc,char*argv[])
{
int i;
int j=0;
int aa[100];//声明一个int数组来存储数据,因为您正在使用%i进行检索
i=0;
文件*数据;
数据=fopen(argv[1],“r”);
而(!feof(数据)){
fscanf(数据,“%i”和aa[i]);
i++;
}
我--;
fclose(数据);
对于(j;j
在file.txt中,提供您提供的任何数据
运行pass/a.out file.txt时
确保file.txt位于同一文件夹中或给出完整路径
并使用gdb debugger来识别错误运行程序时传递的命令行参数是什么?另外,在对fopen的调用可能失败后,ERRNO的值是多少?应进行调试以查看argv[1]中的内容+应测试是否确实有argv[1]。请阅读更多文档。当您以不起作用的方式运行时,您会遇到什么错误?编译错误?链接错误?崩溃如果崩溃,是什么信号?我不明白为什么你发布的代码中会出现segfault。使用调试器或
printf
查找崩溃发生的确切位置。此外,如果您进行了正确的错误检查(argc>1
,data!=NULL
等),这些错误会变得更容易检测。运行程序时传递的命令行参数是什么?另外,对fopen的调用可能失败后,ERRNO的值是多少?应该调试以查看argv[1]中的内容+应该测试您是否确实有argv[1]。请阅读更多文档。当您以不起作用的方式运行时,您会遇到什么错误?编译错误?链接错误?崩溃如果崩溃,是什么信号?我不明白为什么你发布的代码中会出现segfault。使用调试器或printf
查找崩溃发生的确切位置。另外,如果你做了正确的错误检查(argc>1
,data!=NULL
等),这些错误会变得更容易检测。如果OP要检查错误,他最好也检查argc>1
。这是一个很好的信息,但不是答案。这就是为什么我把检查fopen和errno的返回值放在注释中。@xaxxon:你可能有道理,但格式化代码在注释中不起作用,我觉得OP在继续学习C之前确实需要了解错误检查的基本知识。所以我想这是一个答案,但这是对隐含问题的更全面的回答:“我的代码怎么了?”。如果OP要检查错误,他最好也检查argc>1
。这是一个好信息,但不是答案。这就是为什么我把检查fopen和errno的返回值放在注释中。@xaxxon:你可能有道理,但格式化代码在注释中不起作用,我觉得OP确实需要在