2014-02-06 39 views
-1

我想有一個迷你函數,允許用戶鍵入一組數字,並且他們每個都將動態分配到一個數組中。例如:動態分配的數組與用戶輸入C++

int main() 
{ 
    int* x = NULL; 
    int n, numbers; 
    std::cin >> n; 
    x = new int[n] 
    for (int i=0;i<n;i++){ 
     std::cin >> numbers; 
     x[i] = numbers; 
    } 

delete [] x; 

所以當

3 

用戶類型的用戶將能夠以下是

3 1 2 3 

我想存儲的值在3個數字輸入1 ,2,3進入陣列,所以它看起來像

[1, 2, 3] 

但現在它的存儲爲

[123] 

無論如何,我可以解決這個問題嗎?我是C++編程新手,所以我覺得有一個簡單的解決方案,但我不知道如何..謝謝!

+0

這是否編譯? –

+0

使用cin時,您需要爲每個條目按回車。例如:1 等 – Pedrom

+2

@Pedrom這是不正確的。 –

回答

2

您可以將數組的每個元素直接存儲到x [i]中。不知道使用了哪些數字(我從x [i]分配了數字)。

x是要刪除的數組。還有一個;x = new int[x] - 是一個錯字?

int main() 
{ 
    int* x = NULL; 
    int n, numbers; 
    std::cin >> n; 
    x = new int[n]; 
    for (int i=0;i<n;i++){ 
     std::cin >> x[i]; 
     numbers = x[i]; 
    } 

delete [] x; 
+0

嗯...我想你仍然需要編輯這個。什麼是「a」? – m24p

+0

謝謝 - 我編輯過。 – suspectus

2

您可以使用vector代替:

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    int n; 
    cin >> n; 

    vector<int> v; 
    for (int i = 0; i < n; ++i) 
    { 
     int val; 
     cin >> val; 

     v.push_back(val); 
    } 
} 

C++的vector負責內存分配給你的。然後你可以簡單地遍歷它並打印它的內容。

cout << "["; 
for (int i = 0; i < v.size(); ++i) 
{ 
    if (i != 0) 
     cout << ","; 
    cout << v[i]; 
} 
cout << "]"; 
+0

「C++的向量爲你處理內存分配。」正確,這就是爲什麼沒有必要詢問矢量的大小('n')。 – JorenHeit

+0

@JorenHeit它不是矢量大小,而是用戶想要輸入的數字量。 –

+1

@FrançoisMoisan爲什麼你想知道?這就是'CTRL + D'(EOF)的意思,對吧? – JorenHeit

1

爲什麼不動態創建數組?通過這種方式,用戶將無法在事先輸入的元素個數:

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

int main() 
{ 
    vector<int> vec; 
    int x; 
    while (cin >> x) 
     vec.push_back(x); 

    for (int y: vec) 
     cout << y << ' '; 
    cout << '\n'; 
} 

cout聲明只是說明一切正常。

2

Example 1

int main() 
{ 
    int* x = NULL; 
    int n, numbers; 
    std::cin >> n; 
    x = new int[n]; // need a semi-colon here 
    for (int i=0;i<n;i++) 
    { 
     std::cin >> numbers; 
     x[i] = numbers; 
    } 

    for (int j = 0; j < n; ++j) 
    { 
     std::cout << "x[" << j << "] = " << x[j] << std::endl; 
    } 

    delete [] x; // you mean x, not a 

    return 0; 
} 

一旦你解決(我假設只是錯別字),你有什麼優秀作品。但是,除非這是作業分配,否則應考慮使用std::vector而不是原始動態內存分配。這樣做會將您的代碼減少到大約4行。

int main() 
{ 
    std::vector<int> myvector; 
    std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(myvector)); 
    std::copy(myvector.begin(), myvector.end(), std::ostream_iterator<int>(std::cout, "\n")); 
    return 0; 
} 

,或者在C++11

int main() 
{ 
    std::vector<int> myvector{std::istream_iterator<int>(std::cin), std::istream_iterator<int>()}; 
    std::copy(myvector.begin(), myvector.end(), std::ostream_iterator<int>(std::cout, "\n")); 
    return 0; 
}