将数字读入数组并在C中反向打印
我试图使用命令行参数打开一个文件,并反向读取“testdata”文件中的数字测试数据文件中的数字包括:将数字读入数组并在C中反向打印,c,C,我试图使用命令行参数打开一个文件,并反向读取“testdata”文件中的数字测试数据文件中的数字包括: 2 20 200 2000 20000 -2 -20 -200 -20000. 这是我到目前为止编写的代码。文件打印出来,显然不是相反。我想我只是缺少了一个for循环。我也在考虑也许我应该使用fscanf而不是fgets。欢迎您的任何意见 #include <stdio.h> #define MAX_NUMS 1000 int main(int argc, char *arg
2
20
200
2000
20000
-2
-20
-200
-20000.
这是我到目前为止编写的代码。文件打印出来,显然不是相反。我想我只是缺少了一个for循环。我也在考虑也许我应该使用fscanf
而不是fgets
。欢迎您的任何意见
#include <stdio.h>
#define MAX_NUMS 1000
int main(int argc, char *argv[]) {
Int a, n;
char buf[MAX_NUMS];
Int array[MAX_NUMS];
file *pt;
if (argc < 2) {
printf("Usage %s <files..>\n");
}
if ((pt = fopen(argv[1], "r")) == NULL) {
printf("Unable to open %s for reading.\n", argv[1]);
Return 1;
}
while (fgets(buf, MAX_NUMS, pt) != NULL){
printf("%s", buf);
}
for(j = 0; j < MAX_NUMS; j++){
If(fscanf(pt, "%d", &array[a]) != 1);
Break;
For(a = n; a--> 0;){
Printf("%d", array[a]);
}
fclose(pt);
retuern 0;
}
#包括
#定义最大值1000
int main(int argc,char*argv[]){
Int a,n;
char buf[MAX_NUMS];
整数数组[MAX_NUMS];
文件*pt;
如果(argc<2){
printf(“用法%s\n”);
}
如果((pt=fopen(argv[1],“r”)==NULL){
printf(“无法打开%s进行读取。\n”,argv[1]);
返回1;
}
while(fgets(buf,MAX_NUMS,pt)!=NULL){
printf(“%s”,buf);
}
对于(j=0;j0;){
Printf(“%d”,数组[a]);
}
fclose(pt);
复述0;
}
使用while(fscanf(“%d”,&n)){a[i++]=n;}
在0
之前启动i
,并将a
声明为整数数组。稍后在打印时,以相反顺序打印。虽然可以使用fseek()转到文件末尾,但无法从相反顺序读取
您的代码中存在一些问题:
- 流类型拼写为
FILE
- 如果出现错误,您不会从
函数返回。程序将继续运行,并且您的行为未定义main()
- 第一个
中缺少参数printf()
语句有一个输入错误return
#include <stdio.h>
#define MAX_NUMBERS 1000
int main(int argc, char *argv[]) {
int array[MAX_NUMBERS];
int i, n;
FILE *pt;
if (argc < 2) {
printf("Usage %s <files..>\n", argv[0]);
return 1;
}
if ((pt = fopen(argv[1], "r")) == NULL) {
printf("Unable to open %s for reading.\n", argv[1]);
return 1;
}
for (n = 0; n < MAX_NUMBERS; n++) {
if (fscanf(pt, "%d", &array[n]) != 1)
break;
}
for (i = n; i-- > 0;) {
printf("%d\n", array[i]);
}
fclose(pt);
return 0;
}
#包括
#定义最大值为1000
int main(int argc,char*argv[]){
整数数组[最大值];
inti,n;
文件*pt;
如果(argc<2){
printf(“用法%s\n”,argv[0]);
返回1;
}
如果((pt=fopen(argv[1],“r”)==NULL){
printf(“无法打开%s进行读取。\n”,argv[1]);
返回1;
}
对于(n=0;n0;){
printf(“%d\n”,数组[i]);
}
fclose(pt);
返回0;
}
while(fscanf(“%d”,&n))->while(fscanf(“%d”,&n)==1)为什么不一次将一个数字作为一个数字读入数组,然后从最高的元素循环到最低的元素
。还要检查i
与数组大小的关系。你为什么不用这个循环编写一个main
函数?@chqrlie谢谢你的建议。我的主函数在代码的顶部有命令行参数。你是在程序中建议多个函数吗?如果这是个愚蠢的问题,我只是有点困惑。还有,我需要将“n”声明为变量吗?@Kaz:很抱歉,我是在评论Mustakimur的帖子,他没有编写完整的程序。你需要声明int n;int I=0;int a[MAX_NUMBERS]
并定义最大值
到你想处理的最大行数。对我来说,给人们概念是最好的做法,而不是写他们的代码,所以为什么我不愿意。再次感谢你的帮助。对不起,拼写错误,我只需要喘口气,冷静下来,而不是匆匆忙忙。@Kaz:请接受我的评论每次,看看你的源代码,看看我在说什么,看看上面的代码,看看它是如何解决的。一个人学会一步一步走。相信我,每天不断学习新东西感觉很好。我会的。所以请告诉我你的想法。所以我在我的时间里加入了你的代码(fgets语句从我的源代码中删除了const int MAX 1000,并将其替换为#define MAX_NUMBERS 1000。但它只是以相同的顺序打印出我的文件。我不应该使用while吗(fgets打开文件,然后使用for循环反转文本?@Kaz:我的代码是否执行了所需的任务?如果执行了,您应该逐行比较修改后的版本中不同的行为。它不执行任务,当我将其传输到测试文件时,它不会打印任何内容,这就是为什么我认为我可能早在以前就已经执行了(fgets语句。我已经编辑了我的源代码,但是仅仅打开文件,它并没有反转它。