请问这段代码的问题在哪儿?

问题:计算两个向量的点积
问题描述 给定两个向量,计算它们的点积(内积)。
输入 输入数据有若干行。每行上有两个向量(维数皆不超过20),对应一种情形。
输出 对于每一种情形,先输出"Case #: "(#为序号,从1起),然后输出结果(保留2位小数),当维数不同时,输出none。
输入样例
(向量1)空格(向量2)
(1, 2, 3, 4, 5) (5, 4, 3, 2, 1)
(1, 2) (-2, 1)
(1, 2, 3) (1, 2)
输出样例
Case 1: 35.00
Case 2: 0.00
Case 3: none

我的思路:
读到‘(’进入循环读取数字给数组,读到‘)’为止;
读到中间‘ ’出第一个循环;
同样方法给第二个数组赋值;
循环求内积。

我的代码:
#include<stdio.h>
void DotProduct(double a[],double b[],int i,int j)/求向量内积函数/
{
double sum=0;
int count;
if( i!=j )
{
printf("none\n");
}
else
{
for(count=0;count<i;count++)
sum+=a[count]*b[count];
printf("%.2f\n",sum);
}
}

int main()
{
double a[20],b[20];
int k=0,flag=1;
int i,j; /既是循环的标志变量,又分别记录数组的长度/
char cp,cq;
while(scanf("%c",&cp)==1 && cp=='(')
{
for(i=0;flag && scanf("%f%c",&a[i],&cq)==2;i++)
if( cq==')') flag=0;
}
flag=1;
while(scanf("%c",&cp)==1 && cp=='(')
{
for(j=0;flag && scanf("%f%c",&a[i],&cq)==2;j++)
if( cq==')') flag=0;
}
printf("Case %d: ",++k);
DotProduct(a,b,i,j);
return 0;
}

运行结果:
none可以正常打印,但是当向量维数相等时无法正确输出内积,一直是0;

我尝试过的调试:
打印数组a,b,发现是乱码或是0,但不知道问题在哪里。

求各位帮看看哪里有问题(主要是这个),给个更好的办法加说明也可。

while(scanf("%c",&cp)==1 && cp=='(')
输入括号后你按回车键了吗?