0

次のスニペットを作成して、n個の乱数をファイルに書き込みました。書き込んだ後、ファイルから読み取り、番号を配列に格納します。私が直面している問題は、ファイルから読み取るときに余分な番号が表示されることです。

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int limit,i=0;
    int numbers[100];
    char line[100];
    printf("Enter the number of random number to be generated(max 1000)");
    scanf("%d",&limit);
    FILE *fpi;
    fpi=fopen("input.txt","w");
    for(i=0;i<limit;i++)
    {
        fprintf(fpi,"%d\n",rand());
    }
    fclose(fpi);
    FILE *file;
    file = fopen("input.txt", "r");
    while(fgets(line, sizeof line, file)!=NULL)
    {
        numbers[i]=atoi(line);
        i++;
    }
    printf("%d\n\n",i);
    int totalNums = i;
    for (i=0 ; i<totalNums ; i++)
    {
        printf("%d\n",numbers[i]);
    }
    fclose(file);
    return 0;
}

limit = 3を指定し、ファイルに3つの数値(例:47,18836,431)を書き込む場合。ファイルを読み取って印刷すると、6つの値が取得され、そのうち最初の3つはジャンクで、次の3つは書き込まれた値です。

書き込み部分をコメントアウトしてファイルから読み取ろうとすると、3つの数字だけの正しい出力が得られます。ですから、ファイル部分に書き込むコードに問題があると思います。誰かがそれを手伝ってくれますか?

4

1 に答える 1

6

ファイルから読み取る前ににリセットiします。0例えば

//your code before
i=0; //reset i
while(fgets(line, sizeof line, file)!=NULL) 
{      
    numbers[i]=atoi(line); 
    i++;
}
//your code after
于 2012-08-12T16:43:49.003 に答える