gpt4 book ai didi

c - 为什么我必须在 printf() 部分写 i+1,同时写 i++ 来递增?

转载 作者:行者123 更新时间:2023-11-30 21:48:49 25 4
gpt4 key购买 nike

数组中的代码,处理

   printf("\n How many integers? ")
scanf("%d", &n);
for(i = 0; i < n; i++)
printf("\n Enter the %dth value : ", i+1);
scanf("%d", &x[i];

最佳答案

i++计算结果为 i 的当前值,并且作为副作用增量 i 。所以如果你使用 i++printf语句,你最终会增加 i每次循环迭代两次。你的输出将是

Enter the 0th value:
Enter the 2th value:
Enter the 4th value:

等等

您最终会在循环中途写入超出数组末尾的内容。

正如其他人指出的那样,您遇到的问题是您的 scanf调用不是循环的一部分 - 您的代码被解释为

for ( i = 0; i < n; i++ )
{
printf( “\nEnter the %dth value: “, i + 1 );
}
scanf( “%d”, &x[i] );

如果循环体中有多个语句,则它们需要位于 {} 之间:

for ( i = 0; i < n; i++ )
{
printf( “\nEnter the %dth value: “, i + 1 );
scanf( “%d”, &x[i] );
}

编辑

来自评论:

I'd be highly obliged if you could enlighten me on the i++ evaluates, and then increments 1.

表达式 i++结果i 的当前值,副作用i是递增的。假设您有以下代码:

i = 1;
x = i++;

执行这些语句后,x将具有值 1 (增量前 i 的值)和 i将具有值 2大致相当于写作

x = i;
i = i + 1;

除了i只评估一次,并且当 x 的确切顺序被分配并且当i时是否更新未指定。编译器可能生成更新 i 的代码分配 i 的旧值之前至x :

mov i, %eax    ;; assign i to a temporary
inc i ;; increment i
mov %eax, x ;; assign the temporary to x

当然,生成会更直接

mov i, x
inc i

但可能有理由反其道而行之。

重要的是最终结果 - x获取值i 增量之前,以及 i是递增的。

++i计算结果为i + 1副作用是增加 i 。如果你写

i = 1;
x = ++i;

然后在执行这些语句之后,xi值为 2。与书写类似

x = i + 1;
i = i + 1;

与上面相同的警告 - x 的顺序被分配并且 i is update 是未指定,编译器完全有可能生成如下代码:

mov i, %eax   ;; assign i to a temporary
inc %eax ;; increment the temporary
mov %eax, x ;; assign the temporary to x
inc i ;; increment i

尽管类似

inc i
mov i, x

会更直接。

再说一次,重要的是x获取值i + 1 ,以及i是递增的。

Also, so far(in my journey of learning C), I've seen i++ incrementing only in steps of 1. So, I'm clueless about how it may increment to 2 in this case. And, how is i+1 different to impede that?

您的问题标题询问为什么您应该使用 i+1而不是i++在你的打印声明中。假设您写了

for(i = 0; i < n; i++)
{
printf("\n Enter the %dth value : ", i++);
...
}

如果您像这样编写代码,则 i每次循环迭代都会更新两次,这不是您想要的。您不想修改 iprintf称呼。 i++ (以及 ++i--ii-- )全部修改 i 的值。 i+1不修改 i 的值.

关于c - 为什么我必须在 printf() 部分写 i+1,同时写 i++ 来递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57953938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com