2

数字のテキスト ファイルを読んでいて、この数字の合計を取得したいのですが、テキスト ファイル内の数字の数を特定するにはどうすればよいですか。「私のテキスト ファイルは 1 行で構成されています」

これは私が書いたコードです。テキストファイルの数字の数を決定して、コードの2行目の変数「数字の数」の代わりにそれを配置する方法

int main()
{
    FILE *file = fopen("numbers.txt", "r");
    int integers[number of numbers];
    int i=0;
    int j=0;
    int num;

    while(fscanf(file, "%d", &num) > 0) {
        integers[i] =num;
        printf("%d",integers[i]);
        printf("\n");
        i++;
    }

    int sum=0;
    for(j=0;j<sizeof(integers)/sizeof(int);j++)
    {
        sum=sum+integers[j];
    }

    printf("%d",sum);
    printf("\n");
    fclose(file);
    return 0;
}
4

3 に答える 3

4

まず、実際にすべての数値を保存する必要があるかどうかを判断します。すべての入力を保持する必要なく、中間結果を計算することによって単純なデータ処理を実行できることが非常に頻繁にあります。たとえば、入力データセットを保持せずに、入力セットの平均と標準偏差を計算することができます。

あなたの特定の例では、すべての数値を読み取ったときに印刷しsum、それらをすべて保持することなく、 に蓄積できます。

本当にすべての番号を保持する必要があると判断した場合は、次の 2 つのオプションがあります。

  1. ファイルを一度読み込んで数値の数をカウントし、配列を割り当ててfseekから、最初に戻ってすべてを読み取ります。
  2. 最初の配列を割り当ててreallocから、そのサイズを徐々に増やしていきます (この場合、サイズを 1 ずつ増やすのではなく、必要に応じて一定の割合でサイズを増やしてください)。
于 2013-08-24T21:41:26.343 に答える
1

個々の数字が必要ではなく、それらすべての合計のみが必要な場合は、それらを読み取ると同時にそれらを合計するだけです。

int sum = 0;
int num;
while(fscanf(file, "%d", &num) > 0) {
    sum += num;
    printf("%d",num);
    printf("\n");
}

一方、本当にすべての数字を保持する必要がある場合は、さまざまな方法で行うことができます。

  • 最初に数字を数えながらファイルを読み取り、次に最初にシークし、必要なメモリを割り当て、各数字を保存して再度読み取ることができます。
  • 最初にいくらかのメモリを要求し、使い果たしたら (空き容量を追跡する必要があります)、追加のメモリを要求し ( realloc)、完了するまでそれを続けます。
  • ランダム アクセスが必要ない場合は、配列の代わりにリンク リストを使用できます。

編集: 場合によっては、平均を実行する必要があり、したがって、読み取った数値の合計量が本当に必要な場合は、 a を宣言しint n = 0;、ループ内で行う++n;だけで、最後にそれが得られます。

于 2013-08-24T21:43:24.557 に答える