C инкрементная переменная программы с циклом for - PullRequest
2 голосов
/ 28 февраля 2020

Я пытаюсь выучить C язык программирования самостоятельно, и мне нужна некоторая помощь от inte rnet. Я играю с одной переменной и для цикла; увеличивая переменную на 1, каждая итерация l oop. В этом примере меня смущает тот факт, что переменная не равна 1 в первой итерации l oop. Как будто спор был пропущен при первом проходе. Я не понимаю.

// This is a test of for loops

#include <stdio.h>

main () {

    int a;

    for (a = 0; a < 10; a++) {

        printf("%d\n", a);

    }

    return 0;
}

Ответы [ 4 ]

3 голосов
/ 28 февраля 2020

Может быть, это проще всего понять следующим образом. В C, al oop написано так:

for (a = 0; a < 10; a++) {
   printf("%d\n", a);
}

эквивалентно этому:

a=0;
while (a<10) {
   printf("%d\n", a);
   a++;
}

Запись for-l oop предназначена для сбора всех управляющей информации l oop в верхней части l oop как написано, но часть в скобках после ключевого слова for не выполняется как группа операторов перед телом, она обрабатывается так, как если бы она была записана как показано в то время как l oop.

Вы также можете написать бесконечный l oop, как это в C:

for (;;) {
   printf("Hello forever\n");
}

, что эквивалентно:

while (1) {
   printf("Hello forever\n");
}
2 голосов
/ 28 февраля 2020

При инициализации l oop вы инициализируете a в 0 (см. a = 0 в строке 9 вашего фрагмента кода). Первая итерация будет именно такой: 0.

#include <stdio.h>

int main(int argc, char* argv[]) {

    int a;

    /**
     * RIGHT HERE! 
     * "a" is being assigned the value of 0 for the first iteration, and is incremented each loop
     * until a is no longer less than 10.
     */
    for (a = 0; a < 10; a++) {

        printf("%d\n", a);

    }

    return 0;
}

Вы можете начать a с 1, если вы действительно этого хотите, но спросите себя "почему?" Во-первых, начиная с 0, вы обнаружите, что делаете большую часть времени.

(Также, пожалуйста, рассмотрите возможность соответствия вашей подписи main стандарту C, указав тип возвращаемого значения. и принимая соответствующие аргументы, например int main(void) или int main(int argc, char* argv[]))

0 голосов
/ 28 февраля 2020

Для l oop состоит из 4 частей:

for(initialise;condition;updation)
{
  //Body
}

Вот как это работает:

Шаг 1: Выполнить инициализацию (для вас это ноль, поэтому a = 0)
Шаг 2: Оцените условие: если false, завершите l oop. Если true go до следующего шага. (Это верно для вашего случая. Значение a по-прежнему равно 0)
Шаг 3: выполнить тело (значение по-прежнему равно нулю)
Шаг 4: выполнить обновление и go вернуться к шагу 2 (Это где «a» становится 1 для вашего)

Вот почему при первом выполнении Body вы получаете значение a равным нулю.

0 голосов
/ 28 февраля 2020
#include <stdio.h>

int main (int argc, char **argv)
{
    int c = 0;
    while (c < 10) 
    {
        printf("count: %d\n", c);
        c++;
    }
    return 0;
}

также попробуйте инициализировать c с 1 int c = 1;

и попробуйте while (c <= 10)

, и вы также можете использовать c += 1;, но c++; обычно быстрее и просто для удовольствия вы можете попробовать c = c + 1;, мой личный фаворит, но это может быть самый медленный способ приращения, и ваш компилятор может жаловаться на это, вы увидите!

, но когда бы вы ни были работая с C, нужно использовать c++;, это просто маленькая шутка! ;)

...