Проблема с ранжированием наблюдений из текстового файла в C - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть следующий код, который читает в текстовом файле чисел, и мне нужен один столбец, который дает сами цифры, и другой, который ранжирует эти числа. Тем не менее, я получаю очень странный результат. Первая половина чисел 0 кроме первого наблюдения. Тогда вторая половина чисел в порядке. Когда я печатаю числа перед выполнением алгоритма ранжирования, все выглядит хорошо, поэтому что-то в алгоритме ранжирования меняет числа, но я не уверен, почему это может произойти. Содержание txt файла можно увидеть ниже. Любая помощь будет принята с благодарностью!

  30.00 71.51  3.30 87.44 53.42 63.16 89.10 25.75 93.16 27.72
  71.58 48.34 53.11 18.34 27.13 60.31 83.34 22.81 66.84 52.91
  53.42 15.22  8.01 53.39 76.12 79.09 67.61 38.39 24.81 73.21
  13.42 52.10 34.86 99.83 38.46 81.59 61.75 79.62 93.39  3.21
  99.34 92.22 94.29  7.03  6.67 89.35 83.14  9.01 12.68 62.22
   2.95 85.02 95.82 73.96 49.29 77.72 36.65  3.48 48.98 71.83
   1.41  9.48 30.00 89.95 28.39 79.36 54.05 46.08 11.67 37.78
  77.17 74.33 10.13  4.62 49.95 68.40 19.40 34.06  4.11 98.40
  42.44 64.14 89.41 52.99 71.79  3.94 19.73 44.91 71.44 59.10
  27.54 15.67 67.95 55.61 26.05 25.01 82.09 89.67 57.08 38.27

Мой код выглядит следующим образом.

int main()
{
    // Rank data

    double vec2[]={};
    int l;
    l=0;
    FILE *fp2;
    fp2 = fopen("/Users/remymacdonald/Dropbox/STAT778_S20_Shared/Homework/HW1.txt", "r");

    while(fscanf(fp2, "%lf", &vec2[l]) != EOF){l++;};

    // check that it's working

    for(int loop = 0; loop < 100; loop++)
        printf("%lf\n", vec2[loop]);

    printf("\n\n\n\n");


    int rank[100] = {0};

    int i,j;

    for(i = 0; i < 100; i++) {
        int curRank = 1;
        for(j = 0; j < i; j++) {
            if (vec2[i] > vec2[j]) {
                curRank++;
            } else {
                rank[j]++;
            }
        }

        rank[i] = curRank;
    }

    for (i = 0; i < 100; i++)
        printf("%lf %d\n", vec2[i],rank[i]);

    return 0;

}
...