2

strcmp_kr 函数基于 K&R 的字符串比较函数。

#include<stdio.h>
#include<string.h>

int strcmp_kr (char *s, char *d) {

int i=0;

    while ((s[i] == d[i])) {
        printf("Entered while loop\n");
        if (s[i] == '\0')
            return 0;
        i++;
    }
    return s[i] - d[i];
}

int main() {

char s1[15];
char s2[15];
printf("Enter string no. 1:");
scanf("%s", s1);
printf("Enter string no. 2:");
scanf("%s", s2);
strcmp_kr(s1, s2) == 0 ? printf("Strings equal!\n") : \
printf("Strings not equal by %d!\n", strcmp_kr(s1, s2));

}

输出:

$ ./a.out

输入字符串编号。1:谦虚

输入字符串编号。2:谦虚

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

进入while循环

字符串不等于 -5!

问题:为什么while循环进入10次而不是5次?

4

2 回答 2

8
strcmp_kr(s1, s2) == 0 ? printf("Strings equal!\n") : \
printf("Strings not equal by %d!\n", strcmp_kr(s1, s2));

你已经调用strcmp_kr(s1, s2)了两次,第一次是条件,第二次是printf因为你的条件是false,所以你得到了 10 次打印消息。

为避免这种情况,请将返回值存储在变量中,例如

int rtn = strcmp_kr(s1, s2);
rtn == 0 ? printf("Strings equal!\n") : \
printf("Strings not equal by %d!\n", rtn);
于 2013-07-10T00:15:05.480 回答
2

您正在调用该函数两次:

strcmp_kr(s1, s2) == 0 ? printf("字符串相等!\n") : \ printf("字符串不等于 %d!\n", strcmp_kr(s1, s2)) ;

第一次调用评估为 false 并再次调用该函数。

干杯!

于 2013-07-10T00:21:50.907 回答