2017-10-09 48 views
-5

我有一个固定大小(10)的int数组,它没有完全填充。如何计算未完全填充的数组中的整数

我想计算数组中有多少个整数,这样我就知道如果我想向数组中添加一个整数,那么索引数组的值是多少。 (所以我不会取代另一个值)

//Define Array 
int counter=0; 
int scores[10] = {92,87,94,99,96}; 

//Count how many elements are in the score array 
for (int i = 0; i < 10; i++) 
{ 
    if (scores[i] == 1) 
    { 
     counter++; 
    } 
} 

当我输出变量计数器时,我得到的值为“0”。

我看着一对夫妇堆栈溢出帖子,我似乎找到任何东西,这将帮助我找到解决方案!任何帮助或建议都会有很大的帮助。

谢谢。

编辑: 我能够得到我的问题的答案,但我后悔张贴,因为我现在有2个声望点!你们很苛刻! 这是正确的答案

//Define Array 
    int counter=0; 
    int scores[10] = {92,87,94,99,96}; 

    //Count how many elements are in the score array 
    for (int i = 0; i < 10; i++) 
    { 
     if (scores[i] != 0) 
     { 
      counter++; 
     } 
    } 
+3

没有显示的分数值是'1',所以你期望什么? – crashmstr

+0

使用'std :: vecton '并检查当前的大小。 – user0042

+0

@crashmstr 我认为条件(分数[i] == 1)会检查该索引中是否有值。 –

回答

3

例如,您可以考虑包含0(或-1)的数组元素是未填充的元素。

在阵列中的每个元素应当包括任一的实际值或0。任何情况下

该初始化

int scores[10] = {92,87,94,99,96}; 

相当于

int scores[10] = {92,87,94,99,96,0,0,0,0,0}; 

所以环路可以看起来像

for (size_t i = 0; i < sizeof(scores)/sizeof(*scores); i++) 
{ 
    if (scores[i] != 0) 
    { 
     counter++; 
    } 
} 

如果使用值-1的非填充元素,那么你必须初始化非填充元素作为明确例如

int scores[10] = {92,87,94,99,96,-1,-1,-1,-1,-1}; 

循环将看起来像

for (size_t i = 0; i < sizeof(scores)/sizeof(*scores); i++) 
{ 
    if (scores[i] != -1) 
    { 
     counter++; 
    } 
} 
+0

太棒了,我会接受作为答案。我唯一的问题是你为什么要将'i'初始化为size_t?会说我不工作? –

+1

@ Humanid1652487954543 sizeof运算符返回的值的类型是size_t,它是一个无符号类型。编译器可以发出一个警告,你正在比较一个带符号类型的对象(I)和一个无符号类型的对象(由带有sizeof的表达式返回) –

0

你不必这么做。 只要每次在数组中存储一个数字时都会增加计数器,并且计数器本身会告诉您需要存储下一个数字的索引。

0

使用std::vector ,那么size方法:

std::vector v={1,2,4,8}; 
cout << "Vector size is: " << v.size() << "\n" 
+0

也许显示push_back()/ emplace_back()来显示OP项目可以是添加。 – drescherjm