Новичок Здесь.
Для моего класса программирования C мне нужно использовать пузырьковую сортировку для сортировки списка, прочитанного из входного файла .txt. Каждая строка в файле .txt содержит год, название и штаты, затронутые ураганом [год] [имя] [штаты].
Ex:
1999 Floyd NC
2003 Isabel NC, VA
2004 Charley FL, SC, NC
2004 Frances FL
...etc.
Программа должна отсортировать список по годам, сохраняя при этом правильность всех строк данных (сохраняйте относительные элементы массива вместе). Моя пузырьковая сортировка целочисленного массива работает нормально, за исключением одной проблемы: одна строка данных находится в стороне от списка. Вот пример вывода этой проблемы:
1960 Donna FL, NC
1969 Camille MS 1972 Agnes FL
1983 Alicia TX
2004 Charley FL, SC, NC
Строка 1972 Agnes FL
почти правильная, но по какой-то причине печатается сбоку, а не прямо под предыдущей строкой.
Код:
#include <stdio.h>
#include <string.h>
#define MAX_HURCS 30
int main() {
FILE *hurricaneData;
int year[MAX_HURCS];
char name[MAX_HURCS][50];
char states[MAX_HURCS][50];
int i = 0, j;
int count = 0;
int sort;
int tempYear;
char tempName[50];
char tempStates[50];
if ((hurricaneData = fopen("hurricanes2.txt", "r")) == NULL) {
printf("Error: Could not open file");
}
while ((fscanf(hurricaneData, "%d %s", &year[i], &name[i]) != EOF)
&& (fgets(states[i], 50, hurricaneData) != NULL)) {
i++;
count++;
}
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - 1 - i; j++) {
if (year[j] > year[j + 1]) {
tempYear = year[j];
year[j] = year[j+1];
year[j+1] = tempYear;
strcpy(tempName, name[j]);
strcpy(name[j], name[j+1]);
strcpy(name[j+1], tempName);
strcpy(tempStates, states[j]);
strcpy(states[j], states[j+1]);
strcpy(states[j+1], tempStates);
}
}
}
for (i = 0; i < count; i++) {
printf(" \t%d\t%s\t%s ", year[i], name[i], states[i]);
}
return 0;
}
Я также пробовал это для алгоритма сортировки, но столкнулся с той же проблемой:
for (i = 0; i < count; i++) {
for (j = 0; j < count; j++) {
if (year[j] > year[i]) {
tempYear = year[i];
year[i] = year[j];
year[j] = tempYear;
strcpy(tempName, name[i]);
strcpy(name[i], name[j]);
strcpy(name[j], tempName);
strcpy(tempStates, states[i]);
strcpy(states[i], states[j]);
strcpy(states[j], tempStates);
}
}
}