请用指针数组编程实现按奥运会参赛国的国名在字典中的顺序对其入场次序进行排序。 假设参赛国不超过150个,参赛国的国名不超过9个字符。 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。 #include <stdio.h> #define MAX_LEN 10 #define N 150 void SortString(char *ptr[], int n); main() { int i, n; char *pStr[N]; printf("How many countries?\n"); scanf("%d",&n); printf("Input their names:\n"); for (i=0; i<n; i++) { gets(pStr[i]); } SortString(pStr[i], n); printf("Sorted results:\n"); for (i=0; i<n; i++) { puts(pStr[i]); } } void SortString(char *ptr[], int n) { int i, j; char temp; for (i=0; i<n-1; i++) { for (j = i+1; j<n; j++) { if (ptr[j] < ptr[i]); { temp = ptr[i]; ptr[j] = ptr[i]; ptr[j] = temp; } } } }
时间: 2024-02-14 11:35:18 浏览: 154
以下是改正后的程序:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10
#define N 150
void SortString(char *ptr[], int n);
int main() {
int i, n;
char str[N][MAX_LEN];
char *pStr[N];
printf("How many countries?\n");
scanf("%d", &n);
getchar(); // 读取行末的回车符
printf("Input their names:\n");
for (i = 0; i < n; i++) {
fgets(str[i], MAX_LEN, stdin);
str[i][strlen(str[i]) - 1] = '\0'; // 去掉字符串末尾的换行符
pStr[i] = str[i];
}
SortString(pStr, n);
printf("Sorted results:\n");
for (i = 0; i < n; i++) {
puts(pStr[i]);
}
return 0;
}
void SortString(char *ptr[], int n) {
int i, j;
char *temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (strcmp(ptr[j], ptr[i]) < 0) {
temp = ptr[i];
ptr[i] = ptr[j];
ptr[j] = temp;
}
}
}
}
```
改正说明:
1. 在 `main` 函数中,应该定义一个字符数组 `str` 来存储输入的字符串,然后将它们的地址存储到指针数组 `pStr` 中。
2. 在读取输入的字符串时,应该使用 `fgets` 函数,并将字符串末尾的换行符替换为 '\0'。
3. 在调用 `SortString` 函数时,应该传入指针数组 `pStr`,而不是 `pStr[i]`。
4. 在 `SortString` 函数中,应该将 `temp` 定义为指向字符指针的指针,而不是字符指针。
5. 在比较两个字符串的大小时,应该使用 `strcmp` 函数。同时,应该将 `if` 语句中的分号去掉,否则语句块不会执行。
阅读全文