2013-08-01 54 views
0

嘗試在Visual 2010,Visual 2012和CodeBlocks上沒有成功。過去3天我一直在網上漫遊,找不到任何幫助我的答案。Push_back不起作用

我已經試過兩種方式,一是

vector<int> mvec; 
    int num; 
    while(cin >> num) 
     mvec.push_back(num); 
    cout << mvec[0]; 

應該輸出任何輸入的第一個號碼。相反,它什麼都不做。如果我在輸入一個數字序列或在它後面輸入一個字母,它會打印出第一個數字。

想這太

vector<int> myvector; 
    int myint; 

    do { 
     cin >> myint; 
     myvector.push_back(myint); 
    } while (myint); 

    cout << myvector[0]; 

再次,什麼都沒有。我發現這最後一個片段,而谷歌搜索,它顯然是爲它的創造者工作。

一些網上的編譯器告訴我,1 3 4例如輸出爲1。一個我發現說,這項計劃正在試圖打印一個空向量

至少,可能有人試圖運行這些和告訴我他們是否工作?我將在下面列出一個完整的程序。

#include <iostream> 
    #include <vector> 

    int main() 
    { 
     using namespace std; 
     vector<int> mvec; 
     int num = 0; 
     while(cin >> num) 
      mvec.push_back(num); 
     cout << mvec[0]; 
    } 

謝謝你的時間和道歉,如果這是非常明顯的。

+1

你遇到的問題是循環永遠不會退出。這是您需要制定的設計決策。您如何知道用戶何時完成輸入?拿出這個答案,然後應該很容易解決。 – JoshG79

回答

0

您最終需要輸入0才能跳出循環。所以1 3 4 0會導致1.但是你永遠不能使用這種方法在向量中加0。矢量將只有[1,3,4]。

+0

有趣....你爲什麼認爲輸入'0'會終止該循環? – SteveLove

+0

這適用於問題的第二代碼片段(具有'do' ...'而(敏)') –

4

如果輸入值

1 2 3 4 

你需要用CTRL結束 - ž(或CTRL - d在Unix中),這是EOF爲了停止輸入。

的代碼工作正常,由我(VS2012)第一

+0

肯定的,但他所處的環境是Visual Studio的 –

+0

感謝您的幫助,將增加。 –

0

首先第一件事情 - 沒有什麼錯push_back。 :)

您如何期望終止while(cin >> num)循環?它看起來像你使用Windows,所以<Ctrl-Z>將導致cin變得無效,因此終止while循環。在Un * x系統上,它是<Ctrl-D>

輸入一個字母終止循環的原因是cin試圖將結果放入一個數值變量中,並且無法將該字符串解析爲數字。

您的程序適用於我。

(注意:輸入0將不會終止循環)。

-1

您的標準輸出緩衝區可能不會沖洗。試試這個:

cout << myVec[0] << flush; 

或者這樣:

cout << myVec[0] << endl; 
+1

'std :: cout'在從'main'返回時會被刷新。 –

1
vector<int> mvec; 
int num; 
while(cin >> num) 
    mvec.push_back(num); 
cout << mvec[0]; 

循環將繼續,只要CIN >> NUM是成功的。換句話說,只有輸入一個非數字,循環纔會結束,然後打印出第一個數字。

vector<int> myvector; 
int myint; 

do { 
    cin >> myint; 
    myvector.push_back(myint); 
} while (myint); 

cout << myvector[0]; 

當使用期望bool的整數時,值0變成false,任何其他值變爲true。此循環只會在輸入0時停止,因爲這會導致myint變爲false。

我不確定你想要做什麼。如果你只想輸入一個數字,不要使用循環(並且不需要向量)。如果你想輸入一定數量的數字,你將需要一個執行設定次數的for循環。

int num; 
cout << "How many numbers do you want to enter?" << endl; 
if (! (cin >> num)) 
{ 
    cout << "Error expected a number" << endl; 
    return -1; 
} 

vector<int> vec; 
for (int i = 0; i < num; i++) 
{ 
    int x; 
    if (! (cin >> x)) 
     { 
     cout << "Error expected a number" << endl; 
     return -1; 
    } 
    vec.push_back(x); 
} 

for (int i = 0; i < vec.size(); i++) 
{ 
    cout << "number entered: " << vec[i] << endl; 
} 
0

了Bjarne Stroustrup的有性病的在自己的網站爲例::載體的push_back:

http://www.stroustrup.com/bs_faq2.html#simple-program

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

int main() 
{ 
    vector<double> v; 

    double d; 
    while(cin>>d) v.push_back(d); // read elements 
    if (!cin.eof()) {  // check if input failed 
     cin.clear();  // clear error state 
     string s; 
     cin >> s;  // look for terminator string 
     if (s != "end") { 
      cerr << "format error\n"; 
      return 1; // error return 
     } 
    } 

    cout << "read " << v.size() << " elements\n"; 

    reverse(v.begin(),v.end()); 
    cout << "elements in reverse order:\n"; 
    for (int i = 0; i<v.size(); ++i) cout << v[i] << '\n'; 

    return 0; // success return 
} 

您只需輸入用空格分隔的數字,當你完成類型結束

這對初學者很好,因爲它不依賴於變量結束符charac不同的操作系統。