Может за цикл поменять значение переменных явно в c? - PullRequest
0 голосов
/ 13 октября 2018

Почему значение суммы изменяется после цикла for в следующем коде даже после того, как я инициализировал его как 0 в CodeBlocks?

int main()
{
    int a[5], i, sum;
    sum= 0;  // value of sum is not changed after this.
    printf("\nSum=%d", sum);

    for( i=1; i<6; i++)
    {
       printf("\n\nInput %d: ", i);
       scanf("%d", &a[i]);
       printf("Sum test=%d", sum);
    }

printf("\n\nSum=%d", sum); // why does it changes?

    return 0;
}

enter image description here

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

sum никогда не изменяется, потому что вы никогда не изменяете его.

Кроме того, у вас есть неопределенное поведение, потому что индекс цикла отключен на единицу, поэтому вы заставляете scanf() писать за конец массива arr, который по совпадению может быть местом хранения sum, это объясняет, почему вы получаете Sum=4, значение последнего ввода.

C-массивы основаны на 0: используйте это:

    for (i = 0; i < 5; i++)

Необходимо также включить требуемые стандартные заголовочные файлы и проверить возвращаемое значение scanf(), чтобы избежать неопределенного поведения при неверном вводе.

Вот исправленная версия:

#include <stdio.h>

int main() {
    int a[5], i, sum;
    sum = 0;

    printf("Sum=%d\n", sum);
    for (i = 0; i < 5; i++) {
        printf("\nInput %d: ", i);
        if (scanf("%d", &a[i]) != 1)
            break;
        sum += a[i];
        printf("Sum test=%d\n", sum);
    }
    printf("\nSum=%d\n", sum);
    return 0;
}
0 голосов
/ 13 октября 2018

индекс массива начинается с 0, поэтому arr [5] не выделяется, а введенное вами значение присваивается сумме

, если в конце вы дадите его в качестве входных данных 6, тогда сумма будет равна 6

0 голосов
/ 13 октября 2018

Потому что вы перебираете цикл от 1 до 6!И перепишите здесь значение sum.Чтобы избежать этого, вам следует перебрать область видимости массива от индекса 0 до 4.

. Следует помнить, что, поскольку память sum смежна с выделенной памятьюВ массиве такое случается, и это не правило!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...