鱼C论坛

 找回密码
 立即注册
查看: 1315|回复: 3

指针与函数与数组

[复制链接]
发表于 2023-9-19 19:57:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
/*输入5个国家英文名,然后按字母表顺序排序后输出*/
char *name(char *array[],int n)
{
    char *p1,*p2;
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++)
                {
                 
                if(array[i]>array[j])
                {
                        p1=array[i];
                        array[i]=array[j];
                        array[j]=p1;
                }
                }
               
                return array[i];

        }
}

int main()
{
        char *a_name[5][20];
        for(int i=0;i<5;i++)
        {
                scanf("%s",a_name[i]);
        }
        name(*a_name[5],5);
                for(int i=0;i<5;i++)
        {
                printf("%s",a_name[i]);
        }
       
}
错误提示:cannot convert 'char*' to 'char**' for argument '1' to 'char* name(char**, int)'

想问问这个问题怎么解决,因为这个代码运行不了,想问问大家这个代码逻辑上还有什么错误没有?

谢谢大家!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-19 19:57:58 | 显示全部楼层
这个程序有两个问题需要解决。

第一个问题是函数参数类型不匹配。函数定义中的第一个参数是指向指针的指针,但是在调用函数时传递的是一个指向指针数组的指针。可以将函数定义中的第一个参数改为指向指针数组的指针,即将 "char *array[]" 改为 "char **array"。

第二个问题是函数返回值的位置错误。在函数内部,应该在所有循环结束后返回排序后的字符串数组。但是在这个程序中,return语句放在了循环内部,导致只排序了一个元素就返回了。可以将return语句移动到循环外部。

下面是修改后的程序:
#include <stdio.h>
#include <string.h>

void sort_names(char **names, int n)
{
    char *temp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (strcmp(names[ i], names[j]) > 0) {
                temp = names[ i];
                names[ i] = names[j];
                names[j] = temp;
            }
        }
    }
}

int main()
{
    char names[5][20];
    for (int i = 0; i < 5; i++) {
        scanf("%s", names[ i]);
    }
    sort_names(names, 5);
    for (int i = 0; i < 5; i++) {
        printf("%s\n", names[ i]);
    }
    return 0;
}

这个程序首先在主函数中读入5个字符串,然后调用sort_names函数进行排序,最后输出排序后的结果。排序函数中使用了strcmp函数进行字符串比较,如果第一个字符串大于第二个字符串,则交换它们的位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-19 21:01:55 | 显示全部楼层
在您提供的代码中,有几个问题需要解决:

1. 函数声明和函数定义不一致:
   在主函数 main() 中调用的 name() 函数的声明和定义不一致。在函数声明和定义时,参数 array 的类型应为 [b]char 。将函数声明修改如下:
   char *name(char *array[], int n);   
2. 不正确的数组定义和传递:
   在主函数 main() 中,定义数组 a_name 的方式不正确。应该将 char *a_name[5][20] 修改为 char a_name[5][20],以声明一个包含 5 个字符串的二维字符数组。
   同时,在调用 name() 函数时,应该传递数组名 a_name,而不是 *a_name[5]。将代码修改如下:
   name(a_name, 5);   
3. 缺少头文件:
   您的代码中缺少了 <stdio.h><string.h> 头文件,它们分别用于输入输出和字符串操作。请确保将它们添加到代码中。

综上所述,以下是修改后的代码:
#include <stdio.h>#include <string.h>void sort_names(char [/b]names, int n) {    char *temp;    for (int i = 0; i < n - 1; i++) {        for (int j = i + 1; j < n; j++) {            if (strcmp(names[i], names[j]) > 0) {                temp = names[i];                names[i] = names[j];                names[j] = temp;            }        }    }}int main() {    char names[5][20];    for (int i = 0; i < 5; i++) {        scanf("%s", names[i]);    }    sort_names(names, 5);    for (int i = 0; i < 5; i++) {        printf("%s\n", names[i]);    }    return 0;}
这样,您应该能够正确运行并按字母顺序排序输出输入的国家英文名。请注意,修改后的代码使用了 sort_names 函数来对字符串数组进行排序,并且传递的参数类型和数组定义都进行了修正。

此内容为ChatGPT(AI)回答,若有错误多多包涵,如果对你有帮助,请设置一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-26 14:25:33 | 显示全部楼层
本帖最后由 桃花飞舞 于 2023-9-26 14:31 编辑
char *name(char *array[],int n) 
这里返回值类型是char *型的函数,
你是想返回字符串的首地址,其实不用返回首地址,在主函数中的数组地址传进去就行了,可以在主函数再定义一个name_tmp[5][20];
来传入函数中存放排序好的地址,这样就不用返回地址了。函数就是
char name(char *array[],int n)
这样.
另外主函数中
char *a_name[5][20];
这是指向二维数组的指针,相当于三维了.没必要这样。改为
char a_name[5][20];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表