C ++输入字符串包含ASCII 26(替换)字符。如何摆脱它?

时间:2010-08-18 11:44:06

标签: c++ string inputstream

这是我的代码。目的是输入Vector of Student课程,包含姓名和家庭作业成绩。

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 个答案:

答案 0 :(得分:1)

使用Ctrl-Z会将SUB字符插入流中。在该角色之前提取到双重停止。所以你可以通过使用istream :: ignore()方法来消除它。使用count为1并将delim参数设置为0x1A(SUB的值)。

is.ignore(1, 0x1A);

另一种可能性是不要指示用户键入Ctrl-Z,只需按ENTER键。