请用指针数组编程实现按奥运会参赛国的国名在字典中的顺序对其入场次序进行排序。 假设参赛国不超过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; } } } }
时间: 2023-12-06 10:41:56 浏览: 170
修改后的程序如下:
```
#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. 在输入国家名字时,使用了 `gets` 函数,这个函数会读取回车符,导致下一次输入被跳过。应该使用 `fgets` 函数,并且要注意删除读入的回车符。
2. 在调用 `SortString` 函数时,传入了错误的参数,应该传入指针数组 `pStr`,而不是 `pStr[i]`。
3. 在 `SortString` 函数中,交换指针时应该使用指针变量,而不是字符变量。应该将 `temp` 声明为 `char *temp`。
4. 在 `SortString` 函数中,比较字符串大小应该使用 `strcmp` 函数,而不是 `<` 运算符。
阅读全文