簡體   English   中英

如何從.txt中讀取單獨的數字/行並將它們輸入2個不同的數組

[英]How can I read separate numbers/lines from a .txt and input them to 2 different arrays

我正在嘗試編寫一個程序,該程序從.txt中讀取行並將其輸入到2個不同的數組中。

到目前為止,我有這個:

    #include <stdio.h>

    int main() {
        FILE * ifp = fopen("input.txt","r"); 
        FILE * ofp = fopen ("output.txt", "w"); 
        int participants = 0, i;  
        char name [10];
        float grade [10];
        float perc [10];

        fscanf(ifp, "%d", &participants);

        for (i=1; i<participants; i++) {
             fscanf(ifp, "%s", &name);

             fscanf(ifp, "%f", &grade);

        }

        printf( "%d\n", participants);
        printf( "%s\n", name);
        printf( "%f\n", grade);

        fclose(ifp);
        fclose(ofp);

        return 0;
    }

我要閱讀的txt是:

    2 
    Optimus 
    45 90 
    30 60 
    25 30 
    50 70 
    Megatron 
    5 6 
    7 9 
    3 4 
    8 10 

我的問題是,它選擇了前2行,但是到數字時停止了。 我試圖將名稱放入一個數組中,並將所有數字成對放入另一個數組中。 現在,我只是想檢查一下是否要拾取數組中的數字,但沒有拾取全部數字。

這是我得到的輸出:

    2
    Optimus
    0.000000

有任何想法嗎?

編輯

經過一些更改后,這是我的新代碼:

    #include <stdio.h>

    int main() {
        FILE * ifp = fopen("input.txt","r");
        FILE * ofp = fopen ("output.txt", "w");
        int participants = 0, i , j; 
       char name [10];
        int grade [26];
        float perc [26];

        fscanf(ifp, "%d", &participants);

        for (i=1; i<participants; i++) {
             fscanf(ifp, " %s", name);
             fscanf(ifp, " %d", grade);

        }

        printf( "%d\n", participants);
        printf( "%s\n", name);
        printf( "%d\n", grade[0]);

        fclose(ifp);
        fclose(ofp);

      return 0;
    }

我的新輸出是:

    2
    Optimus
    45

編輯2

以后我需要對這些數字進行的操作是,將第一個數字除以同一行中的第二個數字,再乘以10,然后根據該數字顯示“ *”。 因此它將像這樣打印出來:

    Optimus
    +:  *****
    -:  *****
    *:  ********
    /:  *******
    Megatron
    +:  ********
    -:  *******
    *:  *******
    /:  ********

“ +”是名稱下的第一行。 “-”是該名稱下的第二行。 “ *”代表第三個。 “ /”代表第四個。

這是您的主要問題:

    printf( "%f\n", grade);

您正在嘗試將指針打印為浮點數。 您想要grade[0]

在這一行:

    fscanf(ifp, "%f", &grade);

這將起作用,但這是不正確的。 它應該是&grade[0]或僅僅是plain grade

當然,在最終版本中,您需要調整數組下標。 您還需要為該名稱分配更多的數組-您目前只能存儲一個。

要讀入數據,您需要進行很多更改。 您可以將grade聲明為grade[10][8] (假設最多10個參與者),並將8個整數中的每一個存儲在數組中。 這樣的循環將對其進行處理:

   for (i = 0; i < participants; i++) {
      fscanf(ifp, "%s", name);             // read the name (you need to fix this)
      for (j = 0; j < 8; j++) {
        fscanf(ifp, "%d", &grade[i][j]);   // store each number
      }
   }

namegrade是數組-變量的地址對於數組是隱式的。 因此,地址運算符不應用於這些變量。

fscanf(ifp, "%s", name);
fscanf(ifp, "%f", grade);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM