为什么应该输出4却输出5
Why is it outputting 5 when it should output 4
我给它一个参数(嗨,这是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
。
相关文章:
- 为什么我的代码在输出中增加了93天
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么rk4.do_step不输出C++中的初始条件
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我在输出端得到 nan?
- 为什么递归函数的最终输出是 5?
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 为什么输出精度没有正确舍入?
- 为什么这个程序的输出不如预期
- 有人可以向我解释为什么控制台输出 0 吗?
- 为什么文件不是由 F 流创建的,或者即使它是输出只是垃圾值?
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 为什么在这种情况下,bool 类型的输出等于 0?
- 执行此代码时,它不显示任何输出.为什么?
- 使用相同消息重新引发新异常会导致垃圾输出.为什么?
- 我的程序产生错误的输出.为什么
- 怪异的输出:为什么这段代码会给出任何有意义的输出,更不用说这个了
- %n格式说明符程序,在不同的编译器上提供不同的输出.为什么?
- 我的简单类函数中出现意外输出.为什么
- 如果语句不求值为false?程序给出奇怪的输出.为什么