Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数字读入数组并在C中反向打印_C - Fatal编程技术网

将数字读入数组并在C中反向打印

将数字读入数组并在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

我试图使用命令行参数打开一个文件,并反向读取“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 *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语句。我已经编辑了我的源代码,但是仅仅打开文件,它并没有反转它。