2013-11-27 112 views
0

這裏是我的C++代碼現在:如何獲取cin循環以停止用戶點擊輸入?

// Prompt user loop 
char preInput; 
do { 
    // Fill the vector with inputs 
    vector<int> userInputs; 
    cout << "Input a set of digits: " << endl; 
    while(cin>>preInput){ 
     if(preInput == 'Q' || preInput == 'q') break; 
     int input = (int) preInput - '0'; 
     userInputs.push_back(input); 
    }  

    // array of sums sync'd with line # 
    int sums[10] = {0}; 

    // Calculate sums of occurance 
    for(vector<int>::iterator i = userInputs.begin(); i != userInputs.end(); i++){ 
     int currInput = *i; 
     for(int numLine = 0; numLine < lines.size(); numLine++){ 
      sums[numLine] += lineOccurances[numLine][currInput]; 
     } 
    } 

    int lineWithMax = 0; 
    for(int i = 0; i < 10; i ++)   
     if(sums[i] > sums[lineWithMax]) lineWithMax = i; 

    cout << lines[lineWithMax] << endl; 

    // Clear vector 
    userInputs.clear(); 
} while (preInput != 'Q' && preInput != 'q') 

不要擔心環路的功能,我只需要它以某種方式運行。 如果用戶鍵入「123」,循環應該將字符1,2,3作爲單獨的元素加載到userInputs中。 按Enter鍵後,循環需要執行while(cin >> preInput){}語句下面的所有代碼,清除userInput向量,然後重複,直到輸入字符Q.這不是發生了什麼事。循環當前寫入的方式,該程序需要用戶輸入,直到用戶點擊Q,輸入本質上什麼都不做。我需要代碼在用戶輸入時執行。我一直在玩這個有一段時間,但我不太熟悉通過cin通過char將數據傳輸到矢量中,所以我不知道如何做到這一點...任何人都可以指向正確的方向嗎?

會改變cin >> preInput到getline工作嗎?或者,這會試圖將值「... 123」作爲一個賦值放入char preInput中?我需要矢量分別接收數字,而不是將所有數字合併爲一個元素。重申一下,如果用戶輸入「123」userInputs [0]應該是1,userInputs [1]應該是2 ...等等。

本質上,唯一需要改變的是while(cin >> preInput){}循環在用戶輸入時必須中斷。

回答

1

getline閱讀一行,然後使用istringstream分割該行。

std::string line; 
std::getline(std::cin, line); 
std::istringstream iss(line); 

while(iss>>preInput){ 
    if(preInput == 'Q' || preInput == 'q') break; 
    int input = (int) preInput - '0'; 
    userInputs.push_back(input); 
} 

或者,由於您只是一次只查看一個字符,因此您可以直接查看字符串的字符。

for (char c : line) 
{ 
    if (c == 'Q' || c == 'q') break; 
    int input = c - '0'; 
    userInputs.push_back(input); 
} 
相關問題