Входная строка C ++ содержит символ ASCII 26 (Заменить).Как от этого избавиться? - PullRequest
0 голосов
/ 18 августа 2010

Вот мой код.Цель состоит в том, чтобы ввести класс «Вектор ученика», содержащий имя и оценку домашней работы.

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 Ответ

1 голос
/ 18 августа 2010

Использование Ctrl-Z позволяет вставить символ SUB в поток. Извлечение до двойного останавливается непосредственно перед этим персонажем. Таким образом, вы можете устранить это, используя метод istream :: ignore (). Используйте счетчик 1 и установите для параметра delim значение 0x1A (значение SUB).

is.ignore(1, 0x1A);

Другая возможность - не инструктировать пользователя вводить Ctrl-Z, просто нажмите ENTER.

...