2014-11-24 96 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