调试中strcmp内的两个字符串明明不相等,但是输出0
本帖最后由 bild 于 2021-11-27 10:32 编辑#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
char key,a,str,result;
int i,z,n,b,c,d=0,e=0,num,count,p=0,x=0;
_Bool flag=1;
for(i=0;i<=4;i++)
{
z=0;n=0;b=0;c=0;d=0;e=0;num=1;count=0;p=0;
flag=1;
n=0;
for(z=0;z<9;z++)
{
scanf("%c",&a);
if(a=='\n')
break;
}
a='\0';
for(n=0;n<9;n++)
{
switch(a)
{
case '1':case '2':case '3':
b=0;break;
case '4':case '5':case '6':
b=1;break;
case '7':case '8':case '9':
b=2;break;
}
switch(a)
{
case '1':case '4':case '7':
c=0;break;
case '2':case '5':case '8':
c=1;break;
case '3':case '6':case '9':
c=2;break;
}
if(n==z)break;
key=n+1;
}
for(num=1;num<=n;num+=2)
{
b=d=0;
c=e=0;
for(b=0;b<3;b++)
{
for(c=0;c<3;c++)
{
if(key==num)
{
str=b;
str=c;
str='\0';
p++;
goto A;
}
}
}
A: for(d=0;d<3;d++)
{
for(e=0;e<3;e++)
{
if(key==num+1)
{
str=d;
str=e;
str='\0';
p++;
goto B;
}
}
}
B: for(count=0;count<=num-1;count++)
{
if(strcmp(str,str)==0)
{
flag=0;
goto C;
}
}
if(fabs(b-d)==2||fabs(c-e)==2)
{
str=fabs(b-d)/2;
str=fabs(c-e)/2;
str='\0';
++i;
}
}
C: if(flag)
{
result='Y';
result='E';
result='S';
result='\0';
x++;
}
else
{
printf("1\n");
result='N';
result='O';
result='\0';
x++;
}
memset(a,0,sizeof(a));
memset(key,0,sizeof(key));
memset(str,0,sizeof(str));
}
for(x=0;x<=4;x++)
{
printf("%s\n",result);
}
return 0;
}
在B这个位置,为什么明明两个字符串都不一样,但是strcmp依然输出0啊
这个用于测试安卓图案解锁,1代表左上方的那个键,3代表右上的那个键,7代表左下的那个键,9代表右下的那个键
正确答案
输入:12589
14569
1745
1953
输出:YES
YES
NO
NO
以12589为例
在B处的第一个循环时str={0,1}而str={0,0} 有个人求别人帮忙,让对方自备工具。你至少得把你出现问题时输入样例贴出来。 jhq999 发表于 2021-11-27 07:59
有个人求别人帮忙,让对方自备工具。你至少得把你出现问题时输入样例贴出来。
抱歉,欠考虑了 本帖最后由 jhq999 于 2021-11-27 12:09 编辑
bild 发表于 2021-11-27 10:06
抱歉,欠考虑了
B: for(count=0;count<=num-1;count++)
{
if((str==str)&&(str==str)&&(str==str))/////////////str=0的话不管后面是多少就相当于空字符串,只有挨个对比,或者把里面的内容变成字符,比如0变成'0'
{
flag=0;
goto C;
}
}
页:
[1]