У меня есть следующий код, который читает в текстовом файле чисел, и мне нужен один столбец, который дает сами цифры, и другой, который ранжирует эти числа. Тем не менее, я получаю очень странный результат. Первая половина чисел 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;
}