这个C语言哪里错了

来源:百度知道 编辑:UC知道 时间:2024/05/20 02:31:55
比较不回显输入的两个6位密码是否相同,里面似乎是这个:i=strcmp (a,b) 有问题,该怎么改呢?

#include <stdio.h>
void main ()
{
int i;
char a[6],b[6];
for (i=0;i<6;i++)
a[i]=getch ();
fflush(stdin);
for (i=0;i<6;i++)
b[i]=getch ();
i=strcmp (a,b);\*这个地方该怎么写?*\
if (i==0) printf ("the two password are the same.\n");
else printf ("The two password are different!\n");
}

C和C++的数组结束标志是可以自由定义的,所以其结束不会自动出现'\0'这个东东的,而strcmp实际上是通过字符串的结束标志'\0'来作为结束比较的一个条件,所以涅你这里传递给strcmp的参数是有问题的,导致的结果就是strcmp的比较结果是随机的。。如果你硬是要用strcmp实现比较的话,解决办法可以是把a和b定义为7位,最后一位在定义的时候初始化为0就可以了。

这个strcmp其实是被人广为争议的方法。。实际上写这个方法人是没有想到有人会用数组来作为比较条件。。因为数组在理论上就不应该这么被一个字符串比较函数比较的。。

代码贴给你
#include <stdio.h>
void main ()
{
int i;
char a[]={0,0,0,0,0,0,0},b[]={0,0,0,0,0,0,0};
puts("press password:");
for (i=0;i<6;i++)
a[i]=getch ();
fflush(stdin);
puts("press password again");
for (i=0;i<6;i++)
b[i]=getch ();
i=strcmp (a,b);\*这个地方该怎么写?*\
if (i==0) printf ("the two password are the same.\n");
else printf ("The two password are different!\n");
getch();
}

你的写法是正确的,但是由于两个字符串没有结束符,所以你的比较有可能总是会失败。

鉴于你的长度固定为6,完全可以用for语句自己比较,例如:
ok=0;
for (i=0;i<6;i++) if (a[i]!=b[i]) {ok=1;break;}