#include
#include
#include
int main()
{
int n;
while(scanf("%d",&n!=EOF))
{
char a[30][30];
char t[30];
int i,j;
for(i=0;iscanf("%s",&a[i]);
for(i=1;ifor(j=0;jif(strcmp(a[j],a[j+1])>0)
{
strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
}
for(i=0;iprintf("%s ",a[i]);
printf("\n");
}
return 0;
}
第7行scanf("%d",&n!=EOF) 改成:
(scanf("%d",&n)!=EOF)
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这段代码存在一个括号的位置错误,导致读取输入时出现问题。具体来说,下面这一行代码:
while(scanf("%d",&n!=EOF))
应该修改为:
while(scanf("%d",&n)!=EOF)
将判断输入是否结束的括号放到正确的位置。修改后的代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char a[30][30];
char t[30];
int i,j;
for(i=0;i<n;i++)
scanf("%s", a[i]);
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
if(strcmp(a[j],a[j+1])>0)
{
strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
}
for(i=0;i<n;i++)
printf("%s ",a[i]);
printf("\n");
}
return 0;
}
另外,建议在使用scanf时,加上最大读入长度的限制,避免数组越界问题。例如:
scanf("%29s", a[i]); // 最大读入长度为29
该回答引用ChatGPT
参考这个代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void* a, const void* b) {
return strcmp(*(char**)a, *(char**)b);
}
int main() {
int n;
char str[30];
char* names[30];
while (scanf("%d", &n) == 1) {
getchar();
for (int i = 0; i < n; i++) {
fgets(str, 30, stdin);
int len = strlen(str);
if (str[len - 1] == '\n') str[len - 1] = '\0'; // 去掉换行符
names[i] = (char*)malloc(sizeof(char) * (len + 1)); // 动态分配空间
strcpy(names[i], str);
}
qsort(names, n, sizeof(char*), cmp);
for (int i = 0; i < n; i++) {
printf("%s ", names[i]);
free(names[i]); // 释放动态分配的空间
}
printf("\n");
}
return 0;
}