2017-04-05 64 views
0

我想獲得一個函數來接受一行中輸入的所有值,忽略逗號,並將它們存儲到一個向量中。我似乎在放棄我的最後一個輸入

然後我需要矢量將它們打印回來。我是C++的新手,在深入瞭解一些教程並學習了一些小技巧之後,我設法從中除去了一個bug。

我無法得到最後一個數字出現。它將顯示所有這些,除了輸入前的最後一個數字被按下。

有沒有辦法讓最後一個工作,或者我需要整行存儲到一個字符串和搜索方式?

這是我的代碼:

#include "stdafx.h" 
#include<math.h> 
#include<iostream> 
#include<vector> 
#include<stdlib.h> 
using namespace std; 
void fillVector(vector<int>&); 
void printVector(const vector<int>&); 

int main() 
{ 

    vector<int>myVector; 
    fillVector(myVector); 
    printVector(myVector); 
    system("PAUSE"); 
    return 0; 
} 

void fillVector(vector<int>& newMyVector) { 
    cout << "Please type in a series of numbers separated by a comma, and press Enter when done." << endl; 
    int input; 
    cin >> input; 
    while (cin.peek()!= '\n') { 
     newMyVector.push_back(input); 
     cin.ignore(numeric_limits<streamsize>::max(), ','); 
     cin >> input; 
    } 
    cout << endl; 
} 

void printVector(const vector<int>& myNewVector) { 
    for (unsigned int i = 0; i < myNewVector.size(); i++){ 
     if (i <= myNewVector.size() - 2) { 
      cout << myNewVector[i] << ", "; 
     } 
     else { 
      cout << myNewVector[i]<<endl; 
     } 
    } 
} 

我很新的C++,它會顯得好像循環會抓住的最後一個號碼,並將其插入到載體,但它似乎跳過它。

任何幫助都將不勝感激。

謝謝大家提前爲您的時間!

回答

0

發生了什麼是push_back永遠不會被請求最後input。這是因爲新inputwhile循環中,但只有在最後讀入。你可以把它用在與do循環的結束檢查while工作。或者在循環開始時讀取input,然後讀取push_back

do { 
    cin >> input; 
    newMyVector.push_back(input); 
    cin.ignore(numeric_limits<streamsize>::max(), ','); 
} while(cin.peek() != '\n'); 

或者

void fillVector(vector<int>& newMyVector) { 
cout << "Please type in a series of numbers separated by a comma, and press Enter when done." << endl; 
int input; 
while (cin.peek()!= '\n') { 
    cin >> input;   
    newMyVector.push_back(input); 
    cin.ignore(numeric_limits<streamsize>::max(), ','); 
} 
cout << endl; 
} 

這兩個基本上是相同的。

+0

太謝謝你了。我知道這可能是一些簡單的事情,而且果然如此。我得到它的工作,現在我需要做的就是編輯的說明一個逗號添加到末尾所以停止搜索,但現在我必須往前走的地方。再次感謝! –