请我无法理解while循环,为什么循环显示A两次而不是一次
char *s,*t;
s="ABC";
t="AA";
do {printf("A");}
while(*s++==*t++);
printf("%d %d",*s-*t);
答案 0 :(得分:1)
在您的代码中
printf("%d %d",*s-*t);
调用未定义的行为,因为您没有提供足够的参数来满足提供的格式说明符。
答案 1 :(得分:1)
为什么循环显示A两次而不是一次?
do
之后的第一次无条件打印。然后进行测试,条件为真(A == A)。所以循环再次开始,第二次打印A
。之后,再次进行测试,条件为假(D!= A),因此循环终止。
答案 2 :(得分:1)
它打印67
因为(a)您使用的是%d
十进制数字输出格式,而(b),在循环结束后,*s == 'C'
和*t == '\0'
,它们的ASCII值之差为67
。
答案 3 :(得分:0)
do...while
循环始终至少运行一次。所以在第一次迭代中,A
被打印出来。条件s
指向其字符串中的第一个字符(A
),t
指向其字符串中的第一个字符(也是A
)。因此,它比较('A'=='A')
为真,然后s
和t
都递增以指向每个字符串中的第二个字符(分别为A
和B
)
在第二次迭代中,另一个A
被打印出来。在条件中它比较('B'=='A')
为假,然后s
和t
都递增以指向每个字符串中的第三个字符。由于t
字符串只包含两个字符,t
实际上指向字符串末尾的NULL字节。
在printf
中,它将s
(C
)指向的值减去t
指向的值(一个NULL字节,在您的实现中)是0
)。 C
的ASCII值为67
,67 - 0 = 0
,因此会打印67
。