преобразование строковых векторов в int - PullRequest
0 голосов
/ 04 марта 2019

Я должен создать программу, которая читает информацию для студента из файла, и я сделал пару векторов, чтобы сохранить всю эту информацию.Но затем мне нужно суммировать пропуски всех студентов, поэтому мне нужно преобразовать их в целое число, однако, когда я пытаюсь запустить программу, она сразу падает, когда достигает части atoi.

while(!read.eof()) {
    if(i==4){
        i=0;
    }

    read>>b;

    if(i==0){ names.push_back(b); }
    if(i==1){ last_name.push_back(b); }
    if(i==2){ absences.push_back(b); }
    if(i==3){ unatoned.push_back(b); }
    i++;
}

int a = atoi(absences[0].c_str());

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы должны изменить вектор отсутствий на вектор int:

std::vector<int> abscences;

// rest of the code...

Инструкция read >> var позаботится о преобразовании.

Конечно, >>оператор не будет писать в целое число, если оно недопустимо.

0 голосов
/ 04 марта 2019

Если absences остается пустым, то поведение absences[0] равно undefined .

Использование absences.at(0), когда absences пусто, заставляет компилятор генерировать исключение, так чтос ним проще работать.

В любом случае, для количества пропусков, используйте просто

auto a = absences.size();
...