2011-07-27 115 views
1

爲什麼打印出數組的這個簡單代碼不起作用?打印出動態數組或矩陣的元素

void main() 
{ 

    cout<<"Simple for\n"; 
    int n; 
    cout<<"Enter the lenght of array:"; 
    cin>>n; 
    int* a= new int[n]; 
    for(int j=0; j<n; j++){ 
     a[j]=0; 
     cout<<setw(8)<<a[j]; 
     //getchar(); 

    } 
    getchar(); 
    delete[]a; 


} 

輸出快速消失。

當n是固定的,但是當n來自輸入時它不起作用。 當getchar放入For時,它只打印出任意長度的數組中的兩個元素。

有什麼不對?

+0

有什麼問題呢?你是否收到錯誤? –

+0

沒有錯誤。它只打印兩個元素,而不是打印所有元素。 – Susan

回答

2

你可能想這樣的:

int* a= new int[n]; 

C++不是C;你不用new分配「字節」;你分配對象。數組,類型等。所以,如果你想要一個n類型的值的數組,int,那麼你分配。無需sizeof,乘法等

注意什麼您的new數組版本分配(即:new Type[])必須與刪除的磁盤陣列版本刪除:

delete []a; 

大小是不必要的;你只需要確保new[]delete[]

+0

同樣值得一提的是用'delete []'刪除' –

+0

@Als:完成。謝謝。 –

+0

好的,但我的問題是,它的問題是打印只有兩個元素的所有值爲n。 – Susan

2

配對這種分配

int* a= new int(n*sizeof(int)); 

只分配一個int,並將其初始值n*sizeof(int)。不完全是你想要的。

分配ň整數正確的方法是

int* a = new int[n]; 

甚至更​​好

std::vector<int> a(n); 
+0

謝謝。我修改了它,但它仍然打印出兩個元素。 – Susan

+0

它適用於我在這裏http://ideone.com/IdkuY並打印5個元素(全零),如果我輸入5。 –

0

謝謝大家 問題是解決了.. 但我不知道,知道爲什麼。 任何人都可以在這裏解釋另一個getchar()的作用嗎?


這是新代碼:

int main() 
{ 
cout<<"Simple for\n"; 
int n; 
cout<<"Enter the lenght of array:"; 
cin>>n; 
int* a= new int[n]; 
for(int j=0; j<n; j++){ 
     a[j]=0; 
     cout<<setw(8)<<a[j]; 
        } 
    delete[]a; 
    getchar(); 
    getchar(); 
}