实验7 8999 错在哪里

img

#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;
}