充电中_678 2023-11-24 14:21 采纳率: 66.7%
浏览 15
已结题

c语言中字符串数组要怎么传参

为什么该段代码各个函数中字符串都不是我输入的结果

#include <stdio.h>
#include <stdlib.h>
int judge1(char (*nums)[5],int i);
int judge2(char (*nums)[5],int i);
int judge3(char (*nums)[5],int i);
int judge4(char (*nums)[5],int i);

int main(int argc, char *argv[])
{
  int i,k,n;
  scanf("%d",&n);
  char **nums=(char**)malloc(n*sizeof(char*));
  int *score=(int*)malloc(n*sizeof(int));
  for(i=0;i<n;i++)
  {
    nums[i]=(char*)malloc(5*sizeof(char));
    score[i]=0;
  }
  for(i=0;i<n;i++)
  {
    scanf("%s",nums[i]);
    score[i]+=judge1(nums,i)+judge2(nums,i)+judge3(nums,i)+judge4(nums,i);
  }
  for(i=0;i<n;i++)
  {
    printf("%d\n",score[i]);
  }
  return 0;
}
int judge1(char (*nums)[5],int i)
{
  printf("函数中nums[i]:%s\n",nums[i]);
  int a=0;
  if(nums[i][0]-nums[i][1]==1&&nums[i][1]-nums[i][2]==1&&nums[i][2]-nums[i][3]==1)
    a+=5;
  if(nums[i][0]-nums[i][1]==-1&&nums[i][1]-nums[i][2]==-1&&nums[i][2]-nums[i][3]==-1)
    a+=5;
  return a;
}
int judge2(char (*nums)[5],int i)
{
  int a=0;
  if(nums[i][0]==nums[i][1]&&nums[i][1]==nums[i][2])
    a+=3;
  if(nums[i][1]==nums[i][2]&&nums[i][2]==nums[i][3])
    a+=3;
  return a;
}
int judge3(char (*nums)[5],int i)
{
  int a=0;
  if(nums[i][0]==nums[i][2]&&nums[i][1]==nums[i][3])
    a+=1;
  if(nums[i][0]==nums[i][1]&&nums[i][2]==nums[i][3])
    a+=1;
  return a;
}
int judge4(char (*nums)[5],int i)
{
  int a=0,k=0;
  for(k=0;k<4;k++)
  {
    if(nums[i][k]==54||nums[i][k]==56||nums[i][k]==57)
      a+=3;
  }
  return a;
  
}

结果如下,通过int judge1(char (*nums)[5],int i);传递参数,但为什么函数中nums[i]这个字符串有问题?

img

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2023-11-24 14:41
    关注

    judge函数的参数类型定义二维数组,但是每次调用时只传递一个字符串。

    #include <stdio.h>
    #include <stdlib.h>
    
    int judge1(char *nums);
    int judge2(char *nums);
    int judge3(char *nums);
    int judge4(char *nums);
    
    int main() {
        int n;
        scanf("%d", &n);
    
        char **nums = (char**)malloc(n * sizeof(char*));
        int *score = (int*)malloc(n * sizeof(int));
    
        for (int i = 0; i < n; i++) {
            nums[i] = (char*)malloc(5 * sizeof(char));
            score[i] = 0;
            scanf("%s", nums[i]);
            score[i] += judge1(nums[i]) + judge2(nums[i]) + judge3(nums[i]) + judge4(nums[i]);
        }
    
        for (int i = 0; i < n; i++) {
            printf("%d\n", score[i]);
        }
    
        // 释放内存
        for (int i = 0; i < n; i++) {
            free(nums[i]);
        }
        free(nums);
        free(score);
    
        return 0;
    }
    
    int judge1(char *nums) {
        int a = 0;
        printf("函数中nums:%s\n",nums);
        if (nums[0] - nums[1] == 1 && nums[1] - nums[2] == 1 && nums[2] - nums[3] == 1)
            a += 5;
        
        if (nums[0] - nums[1] == -1 && nums[1] - nums[2] == -1 && nums[2] - nums[3] == -1)
            a += 5;
        
        return a;
    }
    
    int judge2(char *nums) {
       int a=0;
    
       if(nums[0]==nums[1]&& nums[1]==nums[2])
           a+=3;
    
       if(nums[1]==nums[2]&&nums[2]==nums[3])
           a+=3;
    
       return a;
    }
    
    int judge3(char *nums) {
       int a=0;
    
       if(nums[0]==nums[2]&&nums[1]==nums[3])
           a+=1;
    
       if(nums[0]==nums[1]&&nums[2]==nums[3])
           a+=1;
       return a;
    }
    
    int judge4(char *nums) {
       int a=0,k=0;
    
       for(k=0;k<4;k++)
       {
           if(nums[k]=='5'||nums[k]=='6'||nums[k]=='7')
               a+=3;
       }
    
       return a;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,