我是一名初级程序员,在练习c-lang时遇到了一个循环问题。
这是代码:
#include <stdio.h>
#include <limits.h>
#include <string.h>
int main(void)
{
char s[5];
int lim = 5;
char c;
int t;
for (t=0;t<lim-1 && (c=getchar()) != 'n' && c != EOF;++t)
{
s[t] =c;
printf("%dn",t);
}
printf("MY t got incremented and i do not know how: %d",t);
s[t]=' ';
printf("%c",s[0]);
printf("%c",s[1]);
printf("%c",s[2]);
printf("%c",s[3]);
printf("%c",s[4]);
return 0;
}
输出:
0
1
2
3
4
为什么变量t
增加到4?
如果我输入了足够多的字符,那么我的t
值得到的最大值是3。我的循环以t
值为3结束,但在我退出循环后,我的t
将增加为4。我不知道这个添加发生在哪里。我是不是错过了一些显而易见的东西?
您的条件是t < lim - 1
;当t
是3
时,条件看起来像3 < 4
。循环进行一次。然后在循环结束时,t
经由++t
递增到4
。当4
,4 < 4
失败,然后退出循环,但t
仍将是4
。
我建议您从lim
的值0开始,然后是1,然后是2…依此类推,然后打印t
的值。这会告诉你实际发生了什么。
欢迎来到SO!你是对的,根据你提交的代码判断,你的exit condition
总是当t小于4时。为了退出循环,最终t
必须递增到4。在大多数情况下,用于退出循环的任何变量都将始终大于、小于或等于退出条件。
如果您希望t
是在退出循环之前的值,您必须这样减少它:
t--;
或
--t;