【问题标题】:C++ input string contain ASCII 26(Substitute) character. How to get rid of it?C++ 输入字符串包含 ASCII 26(替代)字符。如何摆脱它?
【发布时间】:2010-08-18 11:44:05
【问题描述】:

这是我的代码。目的是输入一个学生类的向量,包含姓名和作业成绩。

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 来表示作业成绩输入结束时。各位大神能推荐一下解决方法吗?

【问题讨论】:

    标签: c++ string inputstream


    【解决方案1】:

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

    is.ignore(1, 0x1A);

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

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多