seb’s 2021-11-01 14:26 采纳率: 100%
浏览 32
已结题

二维数组的调用哪里出问题了,有什么注意事项吗?

代码目的:
测试crap的获胜概率。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
# define SIZE 21
int game();
int judge(int sum);
void outcome(int total[][SIZE]);
int main()
{    int status,sum,temp;//status 0-end 1-continue 
    int total[2][SIZE]={0};  //i for times j for 
    srand(time(NULL));
    //start
    int test;
    printf("%s","请输入测试次数:\n");
    scanf("%d",&test);
    for(int i = 0 ;i < test; i++){
        sum=game();
        status=judge(sum);
        temp=sum;
        switch(status){
            case 0:
                total[0][0]++;
                break;
            case 1:
                total[1][0]++;
                break;
            case 2:
                for (int j = 1; ;j++ ){
                    int target;
                    target = game();
                    if(target == temp){
                        if(j>=SIZE){
                            total[0][SIZE-1]++;
                        }else{
                            total[0][j-1]++;
                        }
                        break;
                    }
                    if(target==7){
                        if(j>=SIZE){
                            total[1][SIZE-1]++;
                        }else{
                            total[1][j-1]++;
                        }
                        break;
                    }
                }        
        }
    }
    outcome(total[][SIZE]);
    return 0;
}
void outcome(int total[][SIZE]){
    printf("%s","测试结果如下为:\n");
    printf("%6s","");
    for(int i =1;i<SIZE;i++){
        printf("%3d",i);
    }
    for(int j=0;j<SIZE;j++){
        switch(j){
            case 0:
                printf("%6s","\nWIN");
                break;
            case 1:
                printf("%6d","\nLOSE");
        }
        for(int k=0;k<SIZE;k++){
            printf("%3d",total[j][k]);
        }
    }
}
int game( ){
    int roll_1,roll_2,sum;
    roll_1= rand() % 6 + 1;
    roll_2= rand() % 6 + 1;
    sum = roll_1 + roll_2;
//    printf("%3d  %7d\n",roll_1,roll_2);
    return sum;
}
int judge(int sum){
    switch(sum){
        case 7:
        case 11:
//            printf("%s","Player Win!\n");
            return 0;
        case 2:
        case 3:
        case 12:
//            printf("%s","Host Win!\n");
            return 1;
        default:
            return 2;
    }
}
 

报错如下:
64 16 [Error] expected primary-expression before ']' token

  • 写回答

1条回答 默认 最新

  • 凯特烦恼kai 2021-11-01 15:58
    关注
    1. 报错行数是第50行

    50行: outcome(total[][SIZE]);
    给outcome函数传的参数应该是一个int型,
    你传的total[][SIZE],一他没有指定传入进去的是哪个元素; 二SIZE做下标越界了。
    按照你的相关, outcome()函数传入一个二维数组指针就行了。
    修改意见:

    7  行: void outcome(int total[][SIZE]);    // 这里函数声明的时候可以用total[][SIZE], 是因为他代表是一个数据类型 int [][SIZE]
    50行: outcome(total);
    54行: void outcome(int ** total[][SIZE]){    // 这里同声明。
    
    2. 第二处问题代码
     65             case 1:
     66                 printf("%6d","\nLOSE");   
    

    修改成:

     65             case 1:
     66                 printf("%6s","\nLOSE");    // "\nLOSE" 是char*类型。
    
    3.最后程序还是有点问题, 语法上没啥问题了, 是逻辑上的问题。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 11月1日

悬赏问题

  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制