指针作业为什么不用n==0输出的结果就是错的。。 数组后面不都是\0吗? 况且n到0就...
#include <stdio.h>#define MAX 128
int main()
{
char strone={0};
char strtwo={0};
char *one = strone;
char *two = strtwo;
int i = 1;
int n;
printf("输入第一个字符串:");
fgets(strone, MAX, stdin);
printf("输入第二个字符串:");
fgets(strtwo, MAX, stdin);
printf("输入要对比的字符串个数:");
scanf("%d", &n);
while (n && *one != '\0' && *two != '\0')
{
if ((int)*one < 0)
{
if (*one++ != *two++)
{
break;
}
}
if (*one++ != *two++)
{
break;
}
i++;
n--;
}
if(*one=='\0'&&*two=='\0')
{
printf("两条字符串完全一致!!!");
}
else
{
printf("两条字符串不完全相同,第%d个字符出现不同!",i);
}
return 0;
}
作业原代码如下:
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 1, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\0' && *target2 != '\0')
{
ch = *target1;
if (ch < 0)
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
break;
}
}
if (*target1++ != *target2++)
{
break;
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
}
为什么不用n==0输出的结果就是错的。。 数组后面不都是\0吗? 况且n到0就不执行了啊, 简单看了下,n是对比较字符个数的计数,当比较完成后,字符完全一致则意味着 while 循环条件表达式没有通过(n 自减为 0 导致),字符不一致通过 break 结束循环,此时 n 不为零,
后续程序是通过 n 的先决条件来判断程序是否正常终止,因此舍去对 n == 0 的判定是不正确的。
例如,对字符串 "a" 和 "b" 进行判定,if (*one++ != *two++) 判定通过结束 while 循环,它的指针自增了,此时指针指向了字符串结尾的空字符('\0'),舍去对 n == 0 的判定导致了最后判定字符串相等。
页:
[1]