修正以下代码:#include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ char s[100][100],c[100]={0}; char b[100]; int x,y,z; char *t ; FILE *fp; fp=fopen("c.txt","r"); fscanf(fp,"%d",&x); int i=0,j,k; while(fgets(c,sizeof(c),fp)!= NULL&& strcpy(s[i],c)!=NULL ) { printf("%s\n",s[i]); for(y=0;y<x;y++){ for(z=0;z<x-1;z++){ if(strcmp(s[z],s[z+1])>0){ strcpy(t,s[z]); strcpy(s[z],s[z+1]); strcpy(s[z+1],t); } } } } printf("最小的字符串是:%s\n",s[0]); printf("最大的字符串是:%s",s[4]); }
时间: 2024-01-05 09:03:27 浏览: 74
#include<stdio.h>
以下是修正后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char s[100][100], c[100] = {0};
char b[100];
int x, y, z;
char t[100]; // 修改1:t需要定义为字符数组
FILE *fp;
fp = fopen("c.txt", "r");
fscanf(fp, "%d", &x);
int i = 0, j, k;
while (fgets(c, sizeof(c), fp) != NULL && strcpy(s[i], c) != NULL) {
printf("%s\n", s[i]);
for (y = 0; y < x; y++) {
for (z = 0; z < x - 1; z++) {
if (strcmp(s[z], s[z + 1]) > 0) {
strcpy(t, s[z]);
strcpy(s[z], s[z + 1]);
strcpy(s[z + 1], t);
}
}
}
i++; // 修改2:i需要在循环内部递增
}
printf("最小的字符串是:%s\n", s[0]);
printf("最大的字符串是:%s", s[i - 1]); // 修改3:最大的字符串在s[i-1]中
fclose(fp); // 修改4:需要关闭文件指针
return 0;
}
```
主要修正点:
1. `t` 需要定义为字符数组,因为后面需要使用 `strcpy()` 函数。
2. `i` 需要在循环内部递增,否则会一直读取第一行的字符串。
3. 最大的字符串应该在 `s[i-1]` 中,因为 `i` 是最后一次循环中 `i++` 执行后的值。
4. 需要在程序末尾关闭文件指针。
阅读全文