2017-07-25 107 views
-3

如何重複的std ::函數getline()的用戶數輸入這樣的方法:C++ - 作爲用戶整數輸入重複std :: getline()?

std::string num; 
    std::cout << "How many subjects you want to sum: "; 
    std::getline (std::cin,num); 

然後取用戶數輸入,重複的std ::函數getline()多次輸入來概括所有的科目標誌着用戶會在第一個問題後輸入。

+3

循環通常適合重複使用。 –

+0

好的,但如何循環多少用戶號碼輸入? –

+0

研究['std :: stoi'](http://en.cppreference.com/w/cpp/string/basic_string/stol)和['for'循環](http://en.cppreference.com/W/CPP /語言/對)。 –

回答

1

不希望使用std::getline來輸入數字。

你需要的標準模式:

int quantity = 0; 
std::cout << "Enter quantity of subjects to sum: "; 
std::cin >> quantity; 
int sum = 0; 
for (int i = 0; i < quantity; ++i) 
{ 
    int value; 
    std::cin >> value; 
    sum += value; 
} 

一個常見的數據輸入格式是指定在一行量爲第一數量。

數據將在隨後的行中顯示,通常每行一個數字。

operator>>將跳過空格(包括換行符)。

編輯1:使用getline
如果必須使用getline,請記住,它只能在字符串(字符)讀取。如果你想要數字,你將不得不從文本表示轉換爲內部表示。

int quantity; 
std::string text_line; 
std::cout << "Enter quantity to sum: "; 
std::getline(std::cin, text_line); 
int sum = 0; 
// Extract number from the text 
{ 
    std::istringstream text_stream(text_line); 
    text_stream >> quantity; 
} 
for (int i = 0; i < quantity; ++quantity) 
{ 
    std::getline(std::cin, text_line); 
    std::istringstream text_stream(text_line); 
    int value = 0; 
    text_stream >> value; 
    sum += value; 
} 

注意行數的差異。

此外,請注意使用std::istringstream。它看起來像在第一個例子中使用std::cin

還有其他技術將數字的文本表示轉換爲內部表示。這些留給讀者去研究。

+0

謝謝你,因爲我想:) –

+0

其實,我會不同意你的開頭句子。我認爲'getline()'對於面向行的輸入是更可取的,因爲我相信這是在這裏。直接使用流提取到整數幾乎沒有機會進行驗證,並且有很多機會出現意外行爲。 –