'while'循环字符串比较函数循环超过必要

时间:2013-07-10 00:10:26

标签: c

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:modesy

循环输入

循环输入

循环输入

循环输入

循环输入

循环输入

循环输入

循环输入

循环输入

循环输入

字符串不等于-5!

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

你正在调用该函数两次:

strcmp_kr(s1,s2) == 0? printf(“Strings equal!\ n”):\ printf(“字符串不等于%d!\ n”, strcmp_kr(s1,s2));

第一个调用的计算结果为false,并再次调用该函数。

干杯!