在排除gets函数潜在问题后仍然未能达成目的,请问哪里出了问题
时间: 2024-03-02 16:50:12 浏览: 14
在你的代码中,使用了指向 `i` 和 `j` 的指针 `p1` 和 `p2`,作为 `swap()` 函数的参数,来交换相邻的两个字符。但是,这样做是不正确的,因为 `i` 和 `j` 只是用来临时存储相邻字符的值,而并不是字符指针。
正确的方法是将 `str` 数组中相邻的两个字符的指针作为参数传递给 `swap()` 函数,并通过指针操作来交换它们的值。下面是修改后的代码:
```c
#include <stdio.h>
void swap(char* pa, char* pb); // 声明交换函数
void main() {
char str[80];
int i, j, a;
fgets(str, sizeof(str), stdin); // 使用 fgets() 函数安全地读取用户输入的字符串
for (a = 79; a >= 0; a--) {
if (str[a] != '\0' && str[a] != '\n') {
a++;
break;
}
}
for (i = 0; i < a - 1; i++) {
for (j = 0; j < a - i - 1; j++) {
if (str[j] > str[j + 1]) { // 如果前面的字符大于后面的字符,交换它们的值
swap(&str[j], &str[j + 1]);
}
}
}
printf("%s\n", str); // 输出排序后的字符串
}
void swap(char* pa, char* pb) {
char ch;
ch = *pa;
*pa = *pb;
*pb = ch;
}
```
在修改后的代码中,使用了 `fgets()` 函数来安全地读取用户输入的字符串,并且在计算字符串长度时,排除了可能存在的换行符。在排序循环中,使用了字符指针来交换相邻字符的值,最终输出排序后的字符串。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)