2011-04-30 67 views
3
cout << "How many questions are there going to be on this exam?" << endl; 
cout << ">>"; 
getline(cin, totalquestions); 

這段代碼來自於我創建的類中的一個函數,我需要totalquestions爲int,以便它可以通過for循環運行,並始終詢問總數我問過的問題數量。嘗試在getline中使用int

question q; 
for(int i = 0; i < totalquestions; i++) 
{ 
    q.inputdata(); 
    questions.push_back(q); 
} 

這段代碼在哪裏發揮作用?有沒有人有任何想法使這項工作?

+0

請註明您的想法是* not * working。 – ulidtko 2011-04-30 20:06:48

+2

@ulidtko,實際上,對於這個問題,很容易看到什麼是不工作... – riwalk 2011-04-30 20:08:34

回答

1

不要使用getline

int totalquestions; 
cin >> totalquestions; 
3

這樣做:

int totalquestions; 
cout << "How many questions are there going to be on this exam?" << endl; 
cout << ">>"; 
cin >> totalquestions; 

函數getline是爲搶奪chars。它可以用getline()完成,但cin要容易得多。

10

使用

cin >> totalquestions; 

檢查錯誤太

if (!(cin >> totalquestions)) 
{ 
    // handle error 
} 
0

getline讀取整個行的字符串。你仍然有 將其轉換成一個int:

std::string line; 
if (!std::getline(std::cin, line)) { 
// Error reading number of questions... 
} 
std::istringstream tmp(line); 
tmp >> totalquestions >> std::ws; 
if (!tmp) { 
// Error: input not an int... 
} else if (tmp.get() != EOF) { 
// Error: unexpected garbage at end of line... 
} 

注意,剛輸入的std::cin直接進入 totalquestions工作;它會在緩衝區中保留 '\n'字符,這將使所有的 以下輸入不同步。可以通過向std::cin.ignore添加 調用來避免這種情況,但由於尾隨垃圾,仍然會錯過 錯誤。如果您正在進行面向行的輸入,則 將使用getline,並且使用std::istringstream進行任何 必要的轉換。

0

一個從用戶獲取int的更好的方法: -

#include<iostream> 
#include<sstream> 
using namespace std; 

int main(){ 
    std::stringstream ss; 

    ss.clear(); 
    ss.str(""); 

    std::string input = ""; 

    int n; 

    while (true){ 
     if (!getline(cin, input)) 
      return -1; 

     ss.str(input); 

     if (ss >> n) 
      break; 

     cout << "Invalid number, please try again" << endl; 

     ss.clear(); 
     ss.str(""); 
     input.clear(); 
} 

爲什麼比使用CIN >> N更好?

Actual article explaining why

至於你的問題,用上面的代碼來獲取int值,然後在循環中使用它。