2017-07-16 98 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