2017-10-28 36 views
0

我喜欢将这个数组填充到只有[4]并且只想遍历到第四个位置而不是enire长度。如何迭代一个数组,直到它被填充的位置没有遍历到全长

int main() 
{ 
    int a[10],i,j=0; 
    cout<<"\nEnter 4 number :"; 
    for(i=0;i<4;i++) 
    { 
     cin>>a[i]; 
    } 
    while(a[j]!='\0') 
    { 
     cout<<a[j]; 
     j++; 
    } 

} 

这个代码打印11号

+1

首选'std :: vector'和'std :: array'为C风格的数组。 – Ron

+0

'a [4]'中的值向上未初始化且不确定。你不能那样做。 –

+0

你永远不会初始化你的数组为零,所以它包含随机数字。您终止值''\ 0'不需要您添加,它不会在那里。 – Galik

回答

0

答案是:你不能。数组没有像C风格的字符串终止。

数组具有固定大小,数组无法分辨您写入的元素数量。因此,如果您想为此使用数组,您必须使用广告代码来计算您写入的元素数量,即通过使用额外的变量进行计数。

像:

int a[10],i,j=0; 
int valid_elements = 0; 
cout<<"\nEnter 4 number :"; 
for(i=0;i<4;i++) 
{ 
    cin>>a[i]; 
    ++valid_elements; 
} 
for(i=0;i<valid_elements;i++) 
{ 
    cout<<a[i]; 
} 

然而,这通常不是一个好方法。

一个更好的方法是一个向量,因为向量中元素的数量是动态的。你可以这样做:

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    vector<int> a; 
    int i, j; 
    cout<<"\nEnter 4 number :"; 
    for(i=0;i<4;i++) 
    { 
     cin>>j; 
     a.push_back(j); 
    } 
    for (int x : a) // Range based for loop automatic iterates all elements in the vector 
    { 
     cout<<x; 
    } 

    return 0; 
} 
1

如果你可以使用一个特殊的值,比如零,以表示过去的结束的项目,方式'\0'在C字符串使用,你可以初始化a为全零后,用你的方法:

int a[10] = {0}; 
... 
while (a[j]) { 
    cout << a[j++]; 
} 

的缺点这种方法是在输入中结束标记变为无效。换句话说,如果最终用户在四个输入中输入一个零,打印将在打印少于四个项目后停止。

这就是为什么这两种方法都比较常见:

  • 使用动态容器,如std::vector<int> - 这种方法只适用于C++
  • 商店物品在一个单独的数变量 - 如果您必须使用“原始”数组,这种方法是最常见的。