2015-10-16 29 views
0

它必須是我累了,但我似乎無法弄清楚,爲什麼我的程序將無法讀取這應該是一個起點和一個終點爲init和結束我的CIN值我的程序。其設置爲輸入在第一線的方式是案件的金額,然後會出現一個新的生產線,這將是一個字符串,則下一行會有用空格隔開,所以我覺得我建的方式是兩個整數正確,但是當我調試代碼時,init和end的值永遠不會改變,無論我是否初始化變量。CIN沒有看過我的投入

int case_count; 
string name; 
int init = 0; 
int end = 0; 

cin >> case_count; 
cin.ignore(numeric_limits<::streamsize>::max(),'\n'); 
for (int i = 0; i < case_count; ++i) { 
    cout << "Case " << i << "\n"; 
    getline(cin, name); 
    cin.ignore(numeric_limits<::streamsize>::max(), '\n'); 

    cin >> init; 
    cin >> end; 

實施例輸入

 
3 
flap 
1 3 
swoop 
0 9 
flip 
0 6

其使得難以繼續與代碼的其餘部分。

+0

忽略調用'忽略()'。潘打算。 – CinCout

回答

2

的問題是,您在循環調用ignore。這裏的問題是,std::getline提取物(和扔掉)換行符,這意味着在循環您ignore通話將讀取並丟棄下一個線(一個與兩個數字)。

除此之外,使用輸入操作員能夠讀取數字或字符串時,操作員將跳過領先的白色空間,所以即使getline沒看過換行符,它將仍然有不ignore調用工作。

但是,在您讀取數字後輸入流中會有一個換行符,並且下一次std::getline調用將會接受該換行符,然後name將爲空,所以您應該按照MM的建議評論,移動ignore調用最後的循環。

+1

如果此代碼處於循環中,則可以將'ignore'移動到'cin >> end'之後。否則,下一次循環迭代將失敗。儘管在所有行中使用getline會更加健壯,但sstream或其他解析方法會更加健壯。 –

+0

@ M.M啊,那是真的。感謝您指出了這一點。 :) –