对以下代码纠错并优化#include<stdio.h> #include<string.h> int main(void) { int i,j; char a[5],temp; for(i=0;i<5;i++){ scanf("%s",&a[i]); } for(i=1;i<5;i++){ for(j=0;j<5-i;j++){ if(strcmp(a[i],a[j])){ strcpy(temp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],temp); } } } for(i=0;i<5;i++){ puts(a[i]); } }
时间: 2024-03-07 20:46:35 浏览: 69
下面是修改后的代码:
```
#include<stdio.h>
#include<string.h>
int main(void) {
int i,j;
char a[5][20],temp[20]; // 将a定义为二维数组,temp也需要定义为字符数组
for(i=0;i<5;i++){
scanf("%s",a[i]); // 直接读取字符串到a[i]中
}
for(i=0;i<4;i++){ // i的边界应为0~3
for(j=i+1;j<5;j++){ // j的起始值应为i+1
if(strcmp(a[i],a[j])>0){ // 如果a[i]比a[j]大,则交换
strcpy(temp,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],temp);
}
}
}
for(i=0;i<5;i++){
puts(a[i]);
}
return 0; // 添加返回值
}
```
主要的修改点有:
1. 将`a`定义为二维字符数组,因为需要存储5个字符串,每个字符串最长可能为19个字符。
2. 将`temp`定义为字符数组。
3. 在读取输入时,直接将字符串读取到`a[i]`中。
4. 在比较字符串大小时,使用`strcmp`函数返回值的正负情况判断大小,如果`a[i]`比`a[j]`大,则交换两者的值。
5. 修正`for`循环中的边界和起始值。
6. 在程序结尾添加返回值`0`。
阅读全文