2017-07-29 52 views
1

我正在和我的朋友一起開展一個學校項目,我們希望我們的程序從用戶那裏獲取整數值,並將其存儲在向量中,只要用戶輸入一些值並在用戶停止輸入數字時退出輸入循環。只要用戶進入,如何從用戶那裏獲取整數?

這是我的第一個樣本代碼的推移無限:

while(cin>>x){ 
       v.push_back(x); 
     } 

有一個條件,該號碼必須大於一,但在整數值輸入大於0,所以我的第二個代碼,但它不工作,它也無限地繼續下去。

這是我的示例代碼:

while(cin>>x){ 
      if(x<0){ 
       break; 
      } 
      else{ 
       v.push_back(x); 
      } 
     } 

請給我建議的解決方案在此先感謝:)

+0

什麼構成了用戶的輸入的結束? – Ron

+0

當用戶停止輸入數字並按回車鍵。 – BugAdder

+0

你怎麼會猜測,他按下輸入後不會再輸入任何項目? – VTT

回答

1

對您最重要的部分是清晰地描述你想要什麼。該計劃必須具備某種條件才能終止。

兩個想法:

  1. 用戶輸入由空格隔開的整數值,再壓入輸入

  2. 用戶輸入的整數,按下回車並繼續。只要他按兩次輸入,它就會終止。

如何做到這一點:

  1. 簡單使用CIN一個字符串,通過空間分隔,然後轉換爲整數。

  2. 使用cin與一個字符串,但如果您現在正在做,否則詢問字符串是否爲「」,如果不轉換爲整數。

+0

是的,我想做一些像第一個想法。 – BugAdder

+0

你還需要點什麼?如果您搜索它,您一定會找到用於分隔的代碼。 'atoi'完成轉換。 – Aziuth

0

不完全確定,但我認爲你的意思是像讀取行然後提取整數?如果是這樣,嘗試這樣的事情 - 沒有錯誤檢查,它會放棄從第一個非整數的一切。我沒有使用例外,也沒有使用for_each或lambda或任何幻想。希望能對你的入門有所幫助。

#include <iostream> 
#include <vector> 
#include <sstream> 
#include <string> 



std::vector<int> getUserInput(){ 
    std::vector<int> result; 
    std::string s; 
    std::getline(std::cin, s); 
    std::istringstream is(s); 
    while(is){ 
     int value; 
     is >> value; 
     if(is) result.push_back(value); 
    } 
    return result; 
} 

int main(int,char**){ 
    std::vector<int> userValues = getUserInput(); 
    std::cout << "User input values:\n"; 
    for(int value : userValues) std::cout << value << '\n'; 
    return 0; 
} 
0

使用Aziuth's建議和做像TopCoder公司和Codechef和其他有競爭力的編程網站網站經過一番研究,我想我找到了一個解決方案,而無需使用一個字符串。它將輸入所有輸入值,直到輸入換行符。非常感謝每個人在這個問題上的時間和知識。

的代碼是:

while(1){ 
      cin>>x; 
      v.push_back(x); 
      char ch = getchar(); 
      if(ch=='\n') 
       break; 
     } 
相關問題