#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char a[5][110],t[11];
int i,j;
for (i=0;i<=4; i++){
gets(a[i]);
}
for (i=0;i<=4;i++){
for (j=i+1 ;j<=5; j++){
if (strcmp(a[i],a[j])>0){
strcpy (t, a[i]);
strcpy (a[i],a[j]);
strcpy (a[j],t);
}
}
}
for (i=0;i<=4;i++){
puts(a[i]);
}
return 0;
}
gets(a[i]);的gets()是从缓冲区读取字符,此时你的缓冲区没有数据,所以程序在等待缓冲区的数据(从控制台输入就是将数据存入缓冲区)
gets函数的问题吧,可能是缓冲区溢出了吧
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char a[5][110], t[110]; // 注意这里的缓冲区大小要和 fgets 一致
int i, j;
for (i = 0; i < 5; i++) {
fgets(a[i], sizeof(a[i]), stdin); // 使用fgets读取字符串
}
for (i = 0; i < 5; i++) {
for (j = i + 1; j < 5; j++) {
if (strcmp(a[i], a[j]) > 0) {
strcpy(t, a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
}
for (i = 0; i < 5; i++) {
fputs(a[i], stdout); // 使用fputs输出字符串
}
return 0;
}
修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char a[5][110], t[110]; //t[11]; 修改
int i, j;
for (i = 0; i <= 4; i++) {
gets(a[i]);
}
for (i = 0; i < 4; i++) { //for (i = 0; i <= 4; i++) 修改
for (j = i + 1; j < 5; j++) { //for (j = i + 1; j <= 5; j++) 修改
if (strcmp(a[i], a[j]) > 0) {
strcpy(t, a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
}
for (i = 0; i <= 4; i++) {
puts(a[i]);
}
return 0;
}
【以下回答由 GPT 生成】
问题的原因是字符数组 a
的初始化大小不足以容纳输入的字符串。这导致字符串被截断并显示为小方框。为了解决这个问题,需要将 char a[5][110]
修改为 char a[5][111]
,确保每个字符串都能完整存储。
以下是修改后的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char a[5][111], t[111];
int i, j;
for (i = 0; i <= 4; i++){
fgets(a[i], 111, stdin); // 使用 fgets 替换 gets 函数
}
for (i = 0; i <= 4; i++){
for (j = i + 1; j <= 4; j++){ // 修改循环条件
if (strcmp(a[i], a[j]) > 0){
strcpy(t, a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
}
for (i = 0; i <= 4; i++){
puts(a[i]);
}
return 0;
}
请注意,我还替换了 gets
函数,使用 fgets
函数接收输入字符串,以避免潜在的缓冲区溢出问题。
【相关推荐】