簡體   English   中英

for循環可以在c中顯式更改變量的值嗎?

[英]Can for loop change value of variables explicitly in c?

為什么即使在CodeBlocks中將sum初始化為0后,以下代碼中的for循環后sum的值也為什么會改變?

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;
}

在此處輸入圖片說明

因為您要遍歷16 並在此處重寫sum的值。 為避免這種情況,您應該遍歷數組的范圍,從索引04

您應該意識到,由於sum的內存與數組的分配內存相鄰,因此發生了這種情況,這不是規則!

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開頭,因此不會分配arr [5],並且將您輸入的值求和

如果至少給定它作為輸入6,則總和為6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM