为啥输出会多一位比答案
我在dev-c上测试没问题的。题目:
输入包括两行,每行包括N个数字(1≤N≤50),分别表示两个人对于N个事情对应的看法——0表示不赞同、1表示赞同。两数相同输出1,不同输出0.输出包括一行,包括N个数字,表示两人相遇后,对于这N件事情的最终看法。样例输入1110010100101011
样例输出00110001我的代码:#include <stdio.h>
int main()
{
char a;
char *p1=a;
char *p2=a;
char *p3=a;
//输入两组数据
gets(p1);
gets(p2);
for(;*p1!='\0';)
{
if(*p1==*p2)
*p3='1';
if(*p1!=*p2)
*p3='0';
p1++;
p2++;
p3++;
}
*p3='\0';
puts(a);
return 0;
}
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试的话,在p3=“\0”前加一个 p3--,就行了。
#include <stdio.h>
int main()
{
char a;
char *p1=a;
char *p2=a;
char *p3=a;
//输入两组数据
gets(a);
gets(a);
for(;*p1!='\0'&&*p2!='\0';)
{
if(*p1==*p2)
*p3='1';
else
*p3='0';
p1++;
p2++;
p3++;
}
p3--;
*p3='\0';
puts(a);
return 0;
} @homer @醉空流澈 这个是大牛,@Peace homer 发表于 2015-2-16 12:59
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试 ...
对对。那边将两个最后的“\0”也进行了比较,得出1。可是我自己在编译器试是不会得出这个1的啊。p3--我试过也不行。 homer 发表于 2015-2-16 12:59
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试 ...
用p3--真的解决了!我以前是把p3--;放在了
*p3='\0';后面
听你的放在前面就通过了。不过我自己有点懵 homer 发表于 2015-2-16 12:59
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试 ...
不懂为什么自己在编译器运行就不会判断最后那组'0'。p3--说明在最后那次p3++指针后移,然后再p3--前移。然后再赋值。没有覆盖最后那个p3里存的数?
我刚开始学指针有点乱~ chinalixs 发表于 2015-2-16 13:52
不懂为什么自己在编译器运行就不会判断最后那组'0'。p3--说明在最后那次p3++指针后移,然后再p3--前移。 ...
你是对的,是那边的问题。
其实有时候如果不能得出正确结果,你可以尝试另一种方法啊,例如这里,既然不能通过的话,就单纯用字符数组解决 我也觉得是结尾标志的原因,编译器原因吧。
1 1 1 0 0 1 0 1 \0
0 0 1 0 1 0 1 1 \0
0 0 1 1 0 0 0 1 1
for完后,指针在a,自减就到了a,再赋值为\0,也就是
0 0 1 1 0 0 0 1 \0
了。
页:
[1]