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

时间:2017-07-16 14:45:35

标签: c

我尝试使用命令行参数打开文件并读取我在“测试数据”中的数字。反向文件测试数据文件中的数字包括:

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;
}

2 个答案:

答案 0 :(得分:2)

使用while(fscanf("%d", &n)){ a[i++] = n; }之前i启动0并将a声明为整数数组。稍后打印时,按相反顺序打印。尽管您可以使用fseek()转到文件的末尾,但无法从相反的顺序读取。

答案 1 :(得分:0)

您的代码中存在一些问题:

  • 流类型拼写为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;
}