鱼C论坛

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

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

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

void Licen(int *);

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

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

void Licen(int *str)
{
        int i = 0,n;

        srand((unsigned)time(NULL));

        for(i = 0;i < 54;i ++)
        {
                str[i] = rand()%54+1;
                for(n = 0;n < i;n ++)
                {
                        if(str[n] == str[i])
                        {
                                i--;
                                break;
                        }
                }
        }
}

void Shuf(int *name1p,int *name2p,int *name3p,int *str)
{
int i,j;

        for(i = 0,j = 0;i < 54;j ++)
        {
                name1p[j] = str[i++];
                name2p[j] = str[i++];
                name3p[j] = str[i++];
        }
}

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

        printf("%s手上的牌是:",name2);
        
        printf("%s手上的牌是:",name3);
}
int main()
{
        char flag;
        char name1[10] = {0};
        char name2[10] = {0};
        char name3[10] = {0};
        int name1p[14] = {0};
        int name2p[14] = {0};
        int name3p[14] = {0};
        int str[54] = {0};

        printf("请输入1号玩家的名字:");
        scanf("%s",&name1);
        printf("请输入2号玩家的名字:");
        scanf("%s",&name2);
        printf("请输入3号玩家的名字:");
        scanf("%s",&name3);

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

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

       return 0; 
}
最佳答案
2021-5-18 10:39:09
认真一点
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void Licen(int *);

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

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

void Licen(int *str)
{
        int i = 0,n;

        srand((unsigned)time(NULL));

        for(i = 0;i < 54;i ++)
        {
                str[i] = rand()%54+1;
                for(n = 0;n < i;n ++)
                {
                        if(str[n] == str[i])
                        {
                                i--;
                                break;
                        }
                }
        }
}

void Shuf(int *name1p,int *name2p,int *name3p,int *str)
{
int i,j;

        for(i = 0,j = 0;i < 54;j ++)
        {
                name1p[j] = str[i++];
                name2p[j] = str[i++];
                name3p[j] = str[i++];
        }
}

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

        printf("%s手上的牌是:",name2);
        
        printf("%s手上的牌是:",name3);
}
int main()
{
        char flag;
        char name1[10] = {0};
        char name2[10] = {0};
        char name3[10] = {0};
        //int name1p[14] = {0};       // 14个?
        //int name2p[14] = {0};
        //int name3p[14] = {0};
        int name1p[54] = {0};
        int name2p[54] = {0};
        int name3p[54] = {0};
        int str[54] = {0};

        printf("请输入1号玩家的名字:");
        scanf("%s",name1);
        printf("请输入2号玩家的名字:");
        scanf("%s",name2);
        printf("请输入3号玩家的名字:");
        scanf("%s",name3);

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

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

       return 0; 
}

Shuf执行前

Shuf执行前

Shuf执行后

Shuf执行后

最佳答案

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

使用道具 举报

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

void Licen(int *);

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

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

void Licen(int *str)
{
        int i = 0,n;

        srand((unsigned)time(NULL));

        for(i = 0;i < 54;i ++)
        {
                str[i] = rand()%54+1;
                for(n = 0;n < i;n ++)
                {
                        if(str[n] == str[i])
                        {
                                i--;
                                break;
                        }
                }
        }
}

void Shuf(int *name1p,int *name2p,int *name3p,int *str)
{
int i,j;

        for(i = 0,j = 0;i < 54;j ++)
        {
                name1p[j] = str[i++];
                name2p[j] = str[i++];
                name3p[j] = str[i++];
        }
}

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

        printf("%s手上的牌是:",name2);
        
        printf("%s手上的牌是:",name3);
}
int main()
{
        char flag;
        char name1[10] = {0};
        char name2[10] = {0};
        char name3[10] = {0};
        //int name1p[14] = {0};       // 14个?
        //int name2p[14] = {0};
        //int name3p[14] = {0};
        int name1p[54] = {0};
        int name2p[54] = {0};
        int name3p[54] = {0};
        int str[54] = {0};

        printf("请输入1号玩家的名字:");
        scanf("%s",name1);
        printf("请输入2号玩家的名字:");
        scanf("%s",name2);
        printf("请输入3号玩家的名字:");
        scanf("%s",name3);

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

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

       return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-18 10:51:38 | 显示全部楼层
执行完Shuf函数后,你再输出name3看看
没有修改呀,是dev++的问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这是在linux上执行的结果
问题3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢老哥。我把Shuf函数里面的循环条件改成了j<14
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 11:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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