鱼C论坛

 找回密码
 立即注册
查看: 62|回复: 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语句移动到循环外部。

下面是修改后的程序:

  1. #include <stdio.h>
  2. #include <string.h>

  3. void sort_names(char **names, int n)
  4. {
  5.     char *temp;
  6.     for (int i = 0; i < n - 1; i++) {
  7.         for (int j = i + 1; j < n; j++) {
  8.             if (strcmp(names[ i], names[j]) > 0) {
  9.                 temp = names[ i];
  10.                 names[ i] = names[j];
  11.                 names[j] = temp;
  12.             }
  13.         }
  14.     }
  15. }

  16. int main()
  17. {
  18.     char names[5][20];
  19.     for (int i = 0; i < 5; i++) {
  20.         scanf("%s", names[ i]);
  21.     }
  22.     sort_names(names, 5);
  23.     for (int i = 0; i < 5; i++) {
  24.         printf("%s\n", names[ i]);
  25.     }
  26.     return 0;
  27. }
复制代码


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

使用道具 举报

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

1. 函数声明和函数定义不一致:
   在主函数 main() 中调用的 name() 函数的声明和定义不一致。在函数声明和定义时,参数 array 的类型应为 char 。将函数声明修改如下:
  
  1.    char *name(char *array[], int n);
  2.    
复制代码

2. 不正确的数组定义和传递:
   在主函数 main() 中,定义数组 a_name 的方式不正确。应该将 char *a_name[5][20] 修改为 char a_name[5][20],以声明一个包含 5 个字符串的二维字符数组。
   同时,在调用 name() 函数时,应该传递数组名 a_name,而不是 *a_name[5]。将代码修改如下:
  
  1.    name(a_name, 5);
  2.    
复制代码

3. 缺少头文件:
   您的代码中缺少了 <stdio.h><string.h> 头文件,它们分别用于输入输出和字符串操作。请确保将它们添加到代码中。

综上所述,以下是修改后的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. void sort_names(char [/b]names, int n) {
  4.     char *temp;
  5.     for (int i = 0; i < n - 1; i++) {
  6.         for (int j = i + 1; j < n; j++) {
  7.             if (strcmp(names[i], names[j]) > 0) {
  8.                 temp = names[i];
  9.                 names[i] = names[j];
  10.                 names[j] = temp;
  11.             }
  12.         }
  13.     }
  14. }
  15. int main() {
  16.     char names[5][20];
  17.     for (int i = 0; i < 5; i++) {
  18.         scanf("%s", names[i]);
  19.     }
  20.     sort_names(names, 5);
  21.     for (int i = 0; i < 5; i++) {
  22.         printf("%s\n", names[i]);
  23.     }
  24.     return 0;
  25. }
复制代码

这样,您应该能够正确运行并按字母顺序排序输出输入的国家英文名。请注意,修改后的代码使用了 sort_names 函数来对字符串数组进行排序,并且传递的参数类型和数组定义都进行了修正。

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

使用道具 举报

发表于 7 天前 | 显示全部楼层
本帖最后由 桃花飞舞 于 2023-9-26 14:31 编辑
  1. char *name(char *array[],int n)
复制代码
这里返回值类型是char *型的函数,
你是想返回字符串的首地址,其实不用返回首地址,在主函数中的数组地址传进去就行了,可以在主函数再定义一个name_tmp[5][20];
来传入函数中存放排序好的地址,这样就不用返回地址了。函数就是
  1. char name(char *array[],int n)
复制代码
这样.
另外主函数中
  1. char *a_name[5][20];
复制代码
这是指向二维数组的指针,相当于三维了.没必要这样。改为
  1. char a_name[5][20];
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2023-10-3 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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