gpt4 book ai didi

c - 字符串比较函数循环中的“while”循环超出必要

转载 作者:行者123 更新时间:2023-12-04 11:45:43 24 4
gpt4 key购买 nike

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次?

最佳答案

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);

关于c - 字符串比较函数循环中的“while”循环超出必要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com