2010-08-18 74 views
0

這是我的代碼。目的是輸入一個學生類的Vector,包含名字和家庭作業的成績。C++輸入字符串包含ASCII 26(替代)字符。如何擺脫它?

istream& input(istream& is, student& s){ 
    is.clear(); 
    cout << "Enter student name: "; 
    getline(is,s.name); 
    grade(is,s.homework); 
    return is; 
} 

istream& grade(istream& is, vector<double>& homework){ 
    if(is){ 
     homework.clear(); 
     double x; 
     cout << "Enter grade of student - Ctrl-Z to stop: "; 
     while(is>>x) 
      homework.push_back(x); 
     is.clear(); 
    } 
    return is; 
} 

的問題是,第一個學生的名字就可以了,但是當程序讀取下一個學生的名字(從輸入鍵盤),它總是與替代(ASCII 26)字符開始。我猜想問題來自輸入流,當我用CTRL - Z來表示作業成績輸入的結束。你們能提出一個解決方案嗎?

回答

1

使用Ctrl-Z將插入SUB字符到流中。提取到一個雙重停止在該字符之前。所以你可以通過使用istream :: ignore()方法來消除它。使用計數1並將delim參數設置爲0x1A(SUB的值)。

is.ignore(1, 0x1A);

另一種可能是不通知用戶按Ctrl-Z,只需按Enter鍵。

相關問題