鱼C论坛

 找回密码
 立即注册
查看: 2604|回复: 4

[已解决]为什么没有传入函数的参数会被修改?

[复制链接]
发表于 2021-5-18 10:39:08 | 显示全部楼层 |阅读模式
10鱼币
请问老哥们,为什么name3明明没有传入Shuf这个函数,但是在执行Shuf函数后name3的值被修改了呢?
下面是出的代码(删除了手牌内容输出),请老哥们帮忙看看
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>

  4. void Licen(int *);

  5. void Shuf(int*,int*,int*,int*);

  6. void Display(int *,int *,int *,char *,char *,char *);

  7. void Licen(int *str)
  8. {
  9.         int i = 0,n;

  10.         srand((unsigned)time(NULL));

  11.         for(i = 0;i < 54;i ++)
  12.         {
  13.                 str[i] = rand()%54+1;
  14.                 for(n = 0;n < i;n ++)
  15.                 {
  16.                         if(str[n] == str[i])
  17.                         {
  18.                                 i--;
  19.                                 break;
  20.                         }
  21.                 }
  22.         }
  23. }

  24. void Shuf(int *name1p,int *name2p,int *name3p,int *str)
  25. {
  26. int i,j;

  27.         for(i = 0,j = 0;i < 54;j ++)
  28.         {
  29.                 name1p[j] = str[i++];
  30.                 name2p[j] = str[i++];
  31.                 name3p[j] = str[i++];
  32.         }
  33. }

  34. void Display(int *name1p,int *name2p,int *name3p,char *name1,char *name2,char *name3)
  35. {
  36.         int i;
  37.         printf("%s手上的牌是:",name1);

  38.         printf("%s手上的牌是:",name2);
  39.        
  40.         printf("%s手上的牌是:",name3);
  41. }
  42. int main()
  43. {
  44.         char flag;
  45.         char name1[10] = {0};
  46.         char name2[10] = {0};
  47.         char name3[10] = {0};
  48.         int name1p[14] = {0};
  49.         int name2p[14] = {0};
  50.         int name3p[14] = {0};
  51.         int str[54] = {0};

  52.         printf("请输入1号玩家的名字:");
  53.         scanf("%s",&name1);
  54.         printf("请输入2号玩家的名字:");
  55.         scanf("%s",&name2);
  56.         printf("请输入3号玩家的名字:");
  57.         scanf("%s",&name3);

  58.         printf("%s,%s,%s\n",name1,name2,name3);

  59.         do{
  60.                 printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
  61.                 Licen(str);
  62.                 Shuf(name1p,name2p,name3p,str);
  63.                 printf("name3 = %s\n",name3);
  64.                 Display(name1p,name2p,name3p,name1,name2,name3);
  65.                 printf("重新洗牌(Y/N)?");
  66.                 getchar();
  67.                 scanf("%c",&flag);
  68.         }while(flag == 'Y');

  69.        return 0;
  70. }
复制代码

最佳答案
2021-5-18 10:39:09
认真一点
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>

  4. void Licen(int *);

  5. void Shuf(int*,int*,int*,int*);

  6. void Display(int *,int *,int *,char *,char *,char *);

  7. void Licen(int *str)
  8. {
  9.         int i = 0,n;

  10.         srand((unsigned)time(NULL));

  11.         for(i = 0;i < 54;i ++)
  12.         {
  13.                 str[i] = rand()%54+1;
  14.                 for(n = 0;n < i;n ++)
  15.                 {
  16.                         if(str[n] == str[i])
  17.                         {
  18.                                 i--;
  19.                                 break;
  20.                         }
  21.                 }
  22.         }
  23. }

  24. void Shuf(int *name1p,int *name2p,int *name3p,int *str)
  25. {
  26. int i,j;

  27.         for(i = 0,j = 0;i < 54;j ++)
  28.         {
  29.                 name1p[j] = str[i++];
  30.                 name2p[j] = str[i++];
  31.                 name3p[j] = str[i++];
  32.         }
  33. }

  34. void Display(int *name1p,int *name2p,int *name3p,char *name1,char *name2,char *name3)
  35. {
  36.         int i;
  37.         printf("%s手上的牌是:",name1);

  38.         printf("%s手上的牌是:",name2);
  39.         
  40.         printf("%s手上的牌是:",name3);
  41. }
  42. int main()
  43. {
  44.         char flag;
  45.         char name1[10] = {0};
  46.         char name2[10] = {0};
  47.         char name3[10] = {0};
  48.         //int name1p[14] = {0};       // 14个?
  49.         //int name2p[14] = {0};
  50.         //int name3p[14] = {0};
  51.         int name1p[54] = {0};
  52.         int name2p[54] = {0};
  53.         int name3p[54] = {0};
  54.         int str[54] = {0};

  55.         printf("请输入1号玩家的名字:");
  56.         scanf("%s",name1);
  57.         printf("请输入2号玩家的名字:");
  58.         scanf("%s",name2);
  59.         printf("请输入3号玩家的名字:");
  60.         scanf("%s",name3);

  61.         printf("%s,%s,%s\n",name1,name2,name3);

  62.         do{
  63.                 printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
  64.                 Licen(str);
  65.                 Shuf(name1p,name2p,name3p,str);
  66.         printf("%s,%s,%s\n",name1,name2,name3);
  67.                 printf("name3 = %s\n",name3);
  68.                 Display(name1p,name2p,name3p,name1,name2,name3);
  69.                 printf("重新洗牌(Y/N)?");
  70.                 getchar();
  71.                 scanf("%c",&flag);
  72.         }while(flag == 'Y');

  73.        return 0;
  74. }
复制代码

Shuf执行前

Shuf执行前

Shuf执行后

Shuf执行后

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-18 10:39:09 | 显示全部楼层    本楼为最佳答案   
认真一点
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>

  4. void Licen(int *);

  5. void Shuf(int*,int*,int*,int*);

  6. void Display(int *,int *,int *,char *,char *,char *);

  7. void Licen(int *str)
  8. {
  9.         int i = 0,n;

  10.         srand((unsigned)time(NULL));

  11.         for(i = 0;i < 54;i ++)
  12.         {
  13.                 str[i] = rand()%54+1;
  14.                 for(n = 0;n < i;n ++)
  15.                 {
  16.                         if(str[n] == str[i])
  17.                         {
  18.                                 i--;
  19.                                 break;
  20.                         }
  21.                 }
  22.         }
  23. }

  24. void Shuf(int *name1p,int *name2p,int *name3p,int *str)
  25. {
  26. int i,j;

  27.         for(i = 0,j = 0;i < 54;j ++)
  28.         {
  29.                 name1p[j] = str[i++];
  30.                 name2p[j] = str[i++];
  31.                 name3p[j] = str[i++];
  32.         }
  33. }

  34. void Display(int *name1p,int *name2p,int *name3p,char *name1,char *name2,char *name3)
  35. {
  36.         int i;
  37.         printf("%s手上的牌是:",name1);

  38.         printf("%s手上的牌是:",name2);
  39.         
  40.         printf("%s手上的牌是:",name3);
  41. }
  42. int main()
  43. {
  44.         char flag;
  45.         char name1[10] = {0};
  46.         char name2[10] = {0};
  47.         char name3[10] = {0};
  48.         //int name1p[14] = {0};       // 14个?
  49.         //int name2p[14] = {0};
  50.         //int name3p[14] = {0};
  51.         int name1p[54] = {0};
  52.         int name2p[54] = {0};
  53.         int name3p[54] = {0};
  54.         int str[54] = {0};

  55.         printf("请输入1号玩家的名字:");
  56.         scanf("%s",name1);
  57.         printf("请输入2号玩家的名字:");
  58.         scanf("%s",name2);
  59.         printf("请输入3号玩家的名字:");
  60.         scanf("%s",name3);

  61.         printf("%s,%s,%s\n",name1,name2,name3);

  62.         do{
  63.                 printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
  64.                 Licen(str);
  65.                 Shuf(name1p,name2p,name3p,str);
  66.         printf("%s,%s,%s\n",name1,name2,name3);
  67.                 printf("name3 = %s\n",name3);
  68.                 Display(name1p,name2p,name3p,name1,name2,name3);
  69.                 printf("重新洗牌(Y/N)?");
  70.                 getchar();
  71.                 scanf("%c",&flag);
  72.         }while(flag == 'Y');

  73.        return 0;
  74. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-18 10:51:38 | 显示全部楼层
执行完Shuf函数后,你再输出name3看看
没有修改呀,是dev++的问题吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-18 11:26:27 | 显示全部楼层
人造人 发表于 2021-5-18 10:51
执行完Shuf函数后,你再输出name3看看
没有修改呀,是dev++的问题吧

这是在linux上执行的结果
问题3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-18 11:55:57 | 显示全部楼层

谢谢老哥。我把Shuf函数里面的循环条件改成了j<14
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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