homeskating 发表于 2023-4-18 21:45:13

运行效果与书上示例效果不一样

我的运行效果

书上是
BASIC第一
Computer design第二
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sort(char* name[], int n);
void print(char* name[], int n);
int main(void) {
        char* name[] = {"Follow me", "BASIC", "Great Wall", "FORTRAN", "Computer design"};
        int n = 5;
        sort(name, n);
        print(name, n);
        return 0;
}
void sort(char* name[], int n) {
        char* temp;
        int i, j, k;
        for (i = 0; i < n - 1; i++) {
                //TODO
                k = i;
                for (j = i + 1; j < n; j++) {
                        //TODO
                        if (strcmp(name, name) > 0) {
                                //TODO
                                k = j;
                        }
                        if (k != i) {
                                //TODO
                                temp = name;
                                name = name;
                                name = temp;
                        }
                }
        }
}
void print(char* name[], int n) {
        int i;
        for (i = 0; i < n; i++) {
                //TODO
                printf("%s\n", name);
        }
}

isdkz 发表于 2023-4-18 21:52:45

您好!经过分析您提供的代码,发现在sort()函数的逻辑中有一个错误。具体问题在于:在内部循环结束时应该交换字符串指针,而不是在循环中。请参考以下修改后的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sort(char* name[], int n);
void print(char* name[], int n);
int main(void) {
      char* name[] = {"Follow me", "BASIC", "Great Wall", "FORTRAN", "Computer design"};
      int n = 5;
      sort(name, n);
      print(name, n);
      return 0;
}
void sort(char* name[], int n) {
      char* temp;
      int i, j, k;
      for (i = 0; i < n - 1; i++) {
                k = i;
                for (j = i + 1; j < n; j++) {
                        if (strcmp(name, name) > 0) {
                              k = j;
                        }
                }
                // 交换指针应该在内部循环结束后进行
                if (k != i) {
                        temp = name;
                        name = name;
                        name = temp;
                }
      }
}
void print(char* name[], int n) {
      int i;
      for (i = 0; i < n; i++) {
                printf("%s\n", name);
      }
}


使用修改后的代码,运行结果将会是:
BASIC
Computer design
Follow me
FORTRAN
Great Wall


这个结果与您提到的书上的示例效果一致。
页: [1]
查看完整版本: 运行效果与书上示例效果不一样