c-заполните одномерный массив циклом for

#arrays #c #fill

Вопрос:

Я могу понять первое решение.Но во втором решении я запутался в том 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", amp;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", amp;pin[i]);
    }
  
    return 0;
}
 

Комментарии:

1. Что сбивает с толку и в чем разница? И, пожалуйста, исправьте форматирование.

2. Попробуйте ответить "42 -1 2021 0<ENTER>" на 1-й пример (после первой печати).

3. Хорошо, теперь я вижу, что решения 1 и 2-это одно и то же. Но меня смущает то, что я могу дать 4 значения одновременно . Для меня это не имеет смысла, потому что scanf находится внутри цикла for, и его нужно выполнить 4 раза.

Ответ №1:

Разница только в том, что в первом примере есть функция printf, которая запрашивает входные значения на каждой итерации цикла, в то время как в первом примере перед циклом есть функция printf (только одна).

Операция, которая имеет значение (scanf), точно такая же в двух примерах.

Ответ №2:

scanf Запятая не считывает четыре значения одновременно.

Это пример цикла: фрагмент кода, который выполняет одно и то же несколько раз.

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

Что for делает оператор, так это сначала инициализирует i до нуля, затем проверяет, что i меньше четырех, а затем выполняет код в фигурных скобках. Это scanf оператор, который пытается прочитать целое число по адресу, указанному amp;pin[i] . Так i как равно нулю, это означает, что адрес pin[0] , который является первым элементом массива pin .

После scanf выполнения (и независимо от того, удастся ли это , что вы, возможно, захотите изучить) for оператор увеличивает значение i , проверяет, что оно все еще меньше четырех, и снова выполняет блок кода между фигурными скобками. На этот раз scanf заявление пытается прочитать pin[1] .

Цикл выполняется еще два раза, потенциально сохраняя целые числа в pin[2] и pin[3] перед завершением сразу после увеличения i до 4.