2014-11-24 192 views
-4
#define WERT -0.01 

這裏的float數組是我的數組:填充一個值

float name[9999]; 

我想WERT

的價值

我無法找到一個短期的方式來填補它,試過

for (i = 1000; i <=9999 i+=1) { 
     name[i] = WERT; 
} 

但程序崩潰。循環太長。

還有其他方法嗎?

+1

繼零索引慣例,陣列覆蓋索引0到9998包容性,而不是9999 – 2014-11-24 21:12:17

+0

我們不是你的調試器....下次試試自己修復! – 2014-11-24 22:04:29

+0

@Mcs請不要編輯您的問題以破壞其原始意圖。它使這個線程不可讀,對那些花時間回答的人是不公平的。 – JTG 2014-11-25 00:17:31

回答

2

你迭代一個元素超出了數組的末尾 - 變化:

for (i = 1000; i <=9999 i+=1) { 
     name[i] = WERT; 
} 

for (i = 1000; i < 9999; ++i) { 
     name[i] = WERT; 
} 

(或增加name大小爲10000,如果你真的需要索引最多和最多9999)

還請注意丟失的;,正如@jpw所指出的那樣,以及更常用的++i而不是i+=1,正如@ pm100所指出的那樣。

+0

並且說i ++不是i + = 1。它意味着同樣的事情,但令人驚訝的看到;使人們認爲你正在嘗試做一些奇怪的事情 – pm100 2014-11-24 21:14:07

+0

@ pm100:true,'i ++'更常見,但它並不正確。 – 2014-11-24 21:14:53

+0

對不起,我很累,順便說一下,我可能看起來不錯的C,但它不喜歡JavaScript,我來自 – Mcs 2014-11-24 21:19:12

2

C數組索引從0開始,並且在比數組長度小1的索引處結束。當您嘗試寫入名稱[9999]時,您得到了一個SIGSEGV或類似的東西,因爲沒有這樣的數組元素 - 並且您很幸運,並且不僅僅覆蓋了其他一些對象。 (或者你沒有覆蓋,並墜毀出於這個原因。)

要解決:

for (i = 1000; i <9999 i+=1) { 
     name[i] = WERT; 
} 

對於額外的造型加分,不重複數字常量。

相反

#define ARRAY_LEN 9999 
float name[ARRAY_LEN]; 

    for (i = 1000; i < ARRAY_LEN; i+=1) { 
      name[i] = WERT; 
    } 
+1

_For額外的風格points_修復打破錯誤呢:) – jpw 2014-11-24 21:16:27

+0

打破錯誤? – 2014-11-24 21:17:27

+1

停止條件和for循環的頭部增量之間有一個半角丟失 – jpw 2014-11-24 21:18:18

2

切換到C++,並創建一個類WERTSfloat與初始化值的構造器。

class WERTSfloat 
{ 
    public: 
    float Value; 
    WERTSfloat() { Value= WERT; } 
}; 

然後

WERTSfloat ArrayOf9999WERTSfloats[9999]; 

將填補整個陣列,不管其規模:-)

+1

編號在C中的一個小的語法問題的答案不能切換到C++ ... – jpw 2014-11-24 21:23:24

+0

哈哈,你的幽默感在哪裏? – 2014-11-24 21:24:18

+0

可讀性真的很差。至少調用Float_array_of_999_WERTS類,而不是將其與系統數據類型混淆。 – 2014-11-24 21:24:40