![](/img/trans.png)
[英]How can SWIG read a C defined value if the type is explicitly stated?
[英]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;
}
因為您要遍歷1
到6
! 並在此處重寫sum
的值。 為避免這種情況,您應該遍歷數組的范圍,從索引0
到4
。
您應該意識到,由於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.