expected primary-expression before ']' token

问题

6 × 9 = 42 对于十进制来说是错误的,但是对于 13 进制来说是正确的。即,6 (13) × 9 (13) = 42 (13), 而 42 (13) = 4 × 13 + 2 = 54 (10)。

你的任务是写一段程序读入三个整数 p, q 和 r,然后确定一个进制 B (2 <= B <= 16) 使得 p × q = r。如果 B 有很多选择,输出最小的一个。

例如:当 p = 11, q = 11, r = 121 时,则有 11 (3) × 11 (3) = 121 (3)。因为 11 (3) = 1 × 31 + 1 × 30 = 4 (10) 且 121 (3) = 1 × 32 + 2 × 31 + 1 × 30 = 16 (10)。对于进制 10,有 11 (10) × 11 (10) = 121 (10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。

我的代码

#include<stdio.h>
#include<math.h>
int jinzhi(double n,int a[]);
int main(void)
{
    int a[7],b[7],c[7];
    int n;
    double z;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int j=0,k=0,l=0;
        while(scanf("%d",&a[j++])&&a[j]!=' ')
        while(scanf("%d",&b[k++])&&b[k]!=' ')
        while(scanf("%d",&c[l++])&&c[l]!=' ')
        for(z=2;z<=16;z++)
        {
            if(jinzhi(z,c[])==jinzhi(z,b[])*jinzhi(z,a[]))
            printf("%lf\n",z);break;
        }
        if(z==17)
        printf("0\n");
    }
}
int jinzhi(double n,int a[])
{
    int i,j;
    double c=0;
    for(i=0;a[i]!='0';i++,c++)
    {
        j+=pow(n,c)*a[i];
    }
    return j;
}

错误的是这一行

if(jinzhi(z,c[])==jinzhi(z,b[])*jinzhi(z,a[]))

你的形参是数组,你这里写的实参是啥?既不是地址,也不是数值,地址的话直接c,不用[],或者&c[i]之类的;数值的话你又没有指定下标,而且传数值肯定报错,形参和实参类型不一样。还有其他的逻辑问题,我这里直接无限输入

你把你的思路说一下,以及这个题目给的例子输入输出写一下,你的三个while循环那里有问题

思路还是很清晰的。

其实出错的地方就在语法上。如果函数参数是数组的话,调用的时候直接写数组名就可以。比如说:int get(int a[]),调用的时候只用写成get(a)的格式就可以。如果写成a[]形式的话编译器就会认为这是一个二维数组,与a数组的定义不同,所以会编译错误。

#include<stdio.h>
#include<math.h>
#include<string.h>
int jinzhi(int n, char a[]);
int main(void)
{
    char a[7] = {0};
	char b[7] = {0};
	char c[7] = {0};
    int n;
    int z;
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
    	int flag = 0;
        scanf("%s", a);
        scanf("%s", b);
        scanf("%s", c);
        for(z = 2; z <= 16; z++)
        {
        	int m = 0, j;
        	for(j = 0; a[j] != '\0'; j++)//进制不符 
    			if((a[j]-'0') >= z)
					m++;
    		for(j = 0; b[j] != '\0'; j++)//进制不符 
    			if((b[j]-'0') >= z)
    				m++;
    		for(j = 0; c[j] != '\0'; j++)//进制不符 
    			if((c[j]-'0') >= z)
    				m++;
            if(m == 0 && jinzhi(z,c) == jinzhi(z,b) * jinzhi(z,a)){
            	flag = z;
				break;
			}
        }
        printf("%d\n", flag);
    }
}
int jinzhi(int n, char a[])
{
    int i, j = 0;
    int c = 0;
    for(i = strlen(a)-1; i >= 0; i--, c++)
    {
        j += pow(n,c) * (a[i] - '0');
    }
    return j;
}