gpt4 book ai didi

c - 排序二维数组c程序

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:55 25 4
gpt4 key购买 nike

好的,我必须对我的二维数组进行排序,用户可以选择要排序的列以及升序或降序。所有这些都来自文本文件。到目前为止,这是我的代码:

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

#define NLines 13

int main() {
FILE *readfile;
int FirstArray[NLines][7];
int i, j, k, l, n1, n2, n3, n4, n5, n6, n7, n8, n9;
char choice;
if ((readfile = fopen("cubs-batting-ws-more-names.txt", "r")) == NULL) {
printf("The file failed to open, sorry.");
}
printf("Statistics chart of some of the Cubs players from game 7 of the World Series.\n\n");
printf("Definition of symbols. player (1), games played (2), at-bats (3),\n");
printf("runs scored(4), hits collected (5), home runs hit (6), runs batted in (7),");
printf("batting average(8)and on-base-percentage-plus-slugging (9)\n\n");
do {
printf(" (1) (2) (3) (4) (5) (6) (7)\n");
printf("__________________________________________________________________\n");
for (i = 0; i < NLines; i++) {
for (j = 0; j < 7; j++) {
fscanf(readfile, "%d", &FirstArray[i][j]);
printf("%3d ", FirstArray[i][j]);
}
printf("\n");
}
printf("\nPlease enter a number (in the parenthesis) \n"
"for the column you would like to sort, or 0 to exit. ");
scanf("%d", &k);
printf("\nWould you like to sort in ascending or descending order? ");
scanf(" %c", &choice);
l = k - 1;
switch (choice) {
case 'a':
case 'b':
for (j = 0; j < 7; j++) {
for (i = 0; i < NLines; i++) {
if (FirstArray[i][l] >= FirstArray[i + 1][l]) {
n1 = FirstArray[i][0];
FirstArray[i][0] = FirstArray[i + 1][0];
FirstArray[i + 1][0] = n1;

n2 = FirstArray[i][1];
FirstArray[i][1] = FirstArray[i + 1][1];
FirstArray[i + 1][1] = n2;

n3 = FirstArray[i][2];
FirstArray[i][2] = FirstArray[i + 1][2];
FirstArray[i + 1][2] = n3;

n4 = FirstArray[i][3];
FirstArray[i][3] = FirstArray[i + 1][3];
FirstArray[i + 1][3] = n4;

n5 = FirstArray[i][4];
FirstArray[i][4] = FirstArray[i + 1][4];
FirstArray[i + 1][4] = n5;

n6 = FirstArray[i][5];
FirstArray[i][5] = FirstArray[i + 1][5];
FirstArray[i + 1][5] = n6;

n7 = FirstArray[i][6];
FirstArray[i][6] = FirstArray[i + 1][6];
FirstArray[i + 1][6] = n7;

n8 = FirstArray[i][7];
FirstArray[i][7] = FirstArray[i + 1][7];
FirstArray[i + 1][7] = n8;
}
}
}
break;
case 'D':
case 'd':
for (i = 0; i < NLines; i++) {
if (FirstArray[i][l] <= FirstArray[i + 1][l]) {
n1 = FirstArray[i][0];
FirstArray[i][0] = FirstArray[i + 1][0];
FirstArray[i + 1][0] = n1;

n2 = FirstArray[i][1];
FirstArray[i][1] = FirstArray[i + 1][1];
FirstArray[i + 1][1] = n2;

n3 = FirstArray[i][2];
FirstArray[i][2] = FirstArray[i + 1][2];
FirstArray[i + 1][2] = n3;

n4 = FirstArray[i][3];
FirstArray[i][3] = FirstArray[i + 1][3];
FirstArray[i + 1][3] = n4;

n5 = FirstArray[i][4];
FirstArray[i][4] = FirstArray[i + 1][4];
FirstArray[i + 1][4] = n5;

n6 = FirstArray[i][5];
FirstArray[i][5] = FirstArray[i + 1][5];
FirstArray[i + 1][5] = n6;

n7 = FirstArray[i][6];
FirstArray[i][6] = FirstArray[i + 1][6];
FirstArray[i + 1][6] = n7;

n8 = FirstArray[i][7];
FirstArray[i][7] = FirstArray[i + 1][7];
FirstArray[i + 1][7] = n8;
}
}
break;
default:
printf("invalid choice.\n");
}
}

while (k != 0);
if (fclose(readfile) == EOF) {
printf("The file failed to Close!! Sorry!!");
}
return 0;
}

当我运行我的代码对第一列进行排序时,它对第一列和第一行进行了很好的排序,但其他一切都没有按预期进行。该文件是玩家数据,因此所有行都需要相应保留。当我尝试对其他任何东西进行排序时,它根本不会这样做。我已经尝试了我所知道的一切来解决这个问题,但没有任何效果。如果您能给我任何帮助,我将不胜感激。

我附上截图。 Text File output

最佳答案

在你的for (i循环,条件必须是i<NLines-1当你比较元素 [i][i+1] .

目前,查看您的变量声明(并假设 Intel 架构),FirstArray[i+1]对于 i==Nlines-1将使用您的 int i, j, k, l,... 的值作为值,交换时甚至可能被覆盖。那么i不是 i任何事情都可能发生,也称为未定义行为。

建议:为什么不用循环来交换元素呢?更简单、更清晰、更易于阅读和维护。

建议:如果相等则不需要交换。使条件只是> .

关于c - 排序二维数组c程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41089842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com