c-用for循环填充一维数组

c-fill a one dimensional array with for loop

我能理解第二个解决方案中的第一个solution.But我对scanf的方式感到困惑,同时接受4个值并将它们应用于for循环。

//first solution
#include <stdio.h>

int main() {
    int pin[4],i;
    
    for(i=0; i<4; i++){
        printf("Give value: ");
        scanf("%d", &pin[i]);
    }
  
    return 0;
}
//second solution
#include <stdio.h>

int main() {
    int pin[4],i;
    
    printf("Give 4 values: ");
    
    for(i=0; i<4; i++){
        
        scanf("%d", &pin[i]);
    }
  
    return 0;
}

不同之处仅在于第一个示例中有一个 printf 在循环的每次迭代中询问您输入值,而在第一个示例中循环之前有一个 printf(只有一个)。

重要的操作(scanf)在两个示例中完全相同。

scanf 命令不会同时读取四个值。

这是一个循环的示例:一段代码多次执行相同的操作。

for(i=0; i<4; i++){
    
    scanf("%d", &pin[i]);
}

for 语句所做的是,首先将i 初始化为零,然后检查i 是否小于四,然后执行其花括号内的代码。那就是 scanf 语句,它试图将整数读取到 &pin[i] 指定的地址。由于 i 为零,这意味着 pin[0] 的地址是数组 pin.

的第一个元素

scanf 执行后(以及它是否成功,这是您可能想要查看的内容)for 语句递增 i 的值,检查还是不到四,再次执行大括号之间的代码块。这次,scanf 语句尝试读取到 pin[1].

循环再执行两次,可能会在 pin[2]pin[3] 中存储整数,然后在 i 递增到 4 之后终止。