为什么应该输出4却输出5

Why is it outputting 5 when it should output 4

本文关键字:输出 为什么      更新时间:2023-10-16

我给它一个参数(嗨,这是Michael)。但是它输出
字符串'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: %dn", i);
    getchar();
    return 0;
}

这是因为for循环的工作方式。每次迭代循环时,它首先增加i (i++),然后检查循环的退出条件(argc> 0)。

当你从i = 1开始时,结果是这样的:

  • 它打印"Hi",将i增加到2,然后检查argc是否> 0,检查通过
  • 它打印"this",将i加1到3,然后检查argc是否> 0,检查通过
  • 它打印"is",将i加1到4,然后检查argc>0,检查通过
  • 打印"Michael",将i加到5,然后检查如果argc> 0, 检查失败,则退出循环

所以当我们到达最终打印时,i等于5

您看到5而不是4的原因是您从1而不是0开始i,并且它在for循环中增加:

for (argc--, argv++, i = 1; argc > 0; argc--, argv++, i++) {
    //                                                ^^^
}

在最后一次迭代中打印String 4之后,循环计数器最后一次加1,产生下一次打印输出的5