2017-07-16 42 views
1

我试图用命令行参数打开一个文件,并在我的'testdata'文件中读取相反的数字测试数据文件中的数字包含:将数字读入数组并在C中反向打印0

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

你为什么不读一个数*为数字*在同一时间到一个数组,然后从最高元素循环到最低? –

回答

1

使用while(fscanf("%d", &n)){ a[i++] = n; }发起i0之前和声明a作为整数数组。稍后打印时,按相反顺序打印。虽然可以使用fseek()转到文件末尾,但不能从相反的顺序读取。

+1

'while(fscanf(“%d”,&n))' - >'while(fscanf(“%d”,&n)== 1)''。同时检查'我'与数组的大小。 – chqrlie

+0

为什么不用这个循环写一个'main'函数? – chqrlie

+0

@chqrlie谢谢你的建议。我有我的代码顶部的命令行参数我的主要功能。你在他的计划中建议多个功能吗?对不起,如果这是一个愚蠢的问题,我只是有点困惑。另外,我是否需要将'n'声明为变量? – Kaz

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

再次感谢您的帮助。对不起,我只是需要喘口气,放松一下,而不是冲过去。 – Kaz

+0

@Kaz:一次一个地讲我的言论,看看你的源代码,看看我在说什么,看看上面的代码,看看它是如何解决的。一个人学会一次走一步。相信我,每天不断学习新事物感觉很好。 – chqrlie

+0

我会肯定的。所以请告诉我你的想法。所以我在你的代码中添加了我的while(来自我的源代码的fgets语句,删除了我的const int MAX 1000,并用一个#define MAX_NUMBERS 1000替换了它。但是它再次以相同的顺序打印出我的文件。我的while(fgets打开文件,然后在文本中使用for循环? – Kaz