为什么它应该输出 4 而输出 5
Why is it outputting 5 when it should output 4
我正在论证它(嗨,我是迈克尔)。但它输出
字符串 '1' - 'Hi'
字符串 '2' - 'this'
字符串 '3' - 'is'
字符串 '4' - 'Michael'
字符串总数:5
当它应该说字符串总数为 4
#include <stdio.h>
#include <stdlib.h>
/* print a given string and a number in a pre-determined format. */
void
print_string(int num, char* string)
{
printf("String '%d' - '%s'\n", num, string);
}
int
main(int argc, char* argv[])
{
int i;
/* check for command line arguments */
if (argc < 2) { /* 2 - 1 for program name (argv[0]) and one for a param. */
printf("Usage: %s [<string> ...]\n", argv[0]);
return(1);
}
/* loop over all strings, print them one by one */
for (argc--, argv++, i = 1; argc > 0; argc--, argv++, i++) {
print_string(i, argv[0]); /* function call */
}
printf("Total number of strings: %d\n", i);
getchar();
return 0;
}
您看到 5 而不是 4 的原因是因为您从 1
开始 i
,而不是 0
,并且它在 for
循环中递增:
for (argc--, argv++, i = 1; argc > 0; argc--, argv++, i++) {
// ^^^
}
在最后一次迭代中打印 String 4
之后,循环计数器最后一次递增,为下一次打印输出产生 5
。
这是因为 "for" 循环的工作原理。每次迭代循环时,它都会先递增 i (i++),然后再检查循环的退出条件 (argc > 0)。
所以当您从 i = 1 开始时,会发生以下情况:
- 它打印 "Hi",将 i 递增到 2,然后检查 argc > 0,检查
通过
- 它打印 "this",将 i 递增到 3,然后检查 argc > 0,
检查通行证
- 它打印 "is",将 i 递增到 4,然后检查 argc >
0,检查通过
- 它打印 "Michael",将 i 递增到 5,然后检查
如果 argc > 0,检查失败,所以我们退出循环。
所以当我们到达最终打印时,i 等于 5。
我正在论证它(嗨,我是迈克尔)。但它输出
字符串 '1' - 'Hi'
字符串 '2' - 'this'
字符串 '3' - 'is'
字符串 '4' - 'Michael'
字符串总数:5
当它应该说字符串总数为 4
#include <stdio.h>
#include <stdlib.h>
/* print a given string and a number in a pre-determined format. */
void
print_string(int num, char* string)
{
printf("String '%d' - '%s'\n", num, string);
}
int
main(int argc, char* argv[])
{
int i;
/* check for command line arguments */
if (argc < 2) { /* 2 - 1 for program name (argv[0]) and one for a param. */
printf("Usage: %s [<string> ...]\n", argv[0]);
return(1);
}
/* loop over all strings, print them one by one */
for (argc--, argv++, i = 1; argc > 0; argc--, argv++, i++) {
print_string(i, argv[0]); /* function call */
}
printf("Total number of strings: %d\n", i);
getchar();
return 0;
}
您看到 5 而不是 4 的原因是因为您从 1
开始 i
,而不是 0
,并且它在 for
循环中递增:
for (argc--, argv++, i = 1; argc > 0; argc--, argv++, i++) {
// ^^^
}
在最后一次迭代中打印 String 4
之后,循环计数器最后一次递增,为下一次打印输出产生 5
。
这是因为 "for" 循环的工作原理。每次迭代循环时,它都会先递增 i (i++),然后再检查循环的退出条件 (argc > 0)。
所以当您从 i = 1 开始时,会发生以下情况:
- 它打印 "Hi",将 i 递增到 2,然后检查 argc > 0,检查 通过
- 它打印 "this",将 i 递增到 3,然后检查 argc > 0, 检查通行证
- 它打印 "is",将 i 递增到 4,然后检查 argc > 0,检查通过
- 它打印 "Michael",将 i 递增到 5,然后检查 如果 argc > 0,检查失败,所以我们退出循环。
所以当我们到达最终打印时,i 等于 5。