Требуется найти ошибку в коде [требует правки]

245
08 мая 2017, 02:28

Программа компилируется, но при запуске и вводе первого значения вылетает ошибка. В чем проблема понять не могу. Код:

#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
int main()
{
    setlocale(0, "");
    int n;
    string s;
    string temp;
    int numb;
    int mass[97];
    for(int i = 0; i < 98; i++)
    {
        mass[i] = 0;
    }
    cin >> n;
        for(int k = 0; k < n; k++)
        {

        getline(cin, s);
        if(s.substr(s.length()-2, 1) == " ")
        {
            temp = s.substr(s.length()-1, 1);
            numb = atoi(temp.c_str());
            mass[numb - 1] = mass[numb - 1] + 1;

        }
        else
        {
            temp = s.substr(s.length()-1, 1);
            numb = atoi(temp.c_str());
            mass[numb - 1] = mass[numb - 1] + 1;

        }
        }

    for(int u = 0; u < n; u++)
    {
        if(mass[u] > 0)
        {
            cout << "School №" << u << ": " << mass[u] << endl; 
        }

    }


    system("pause");
    return 0;
}
Answer 1

не будем даже далеко ходить...

int mass[97];

Массив из 97 элементов.

for(int i = 0; i < 98; i++)
{
    mass[i] = 0;
}

Записываются элементы 0, 1, 2, ..., 97 - итого 98 штук. Уже UB.

Далее - cin >> n;. В буфере остается '\n'.

getline(cin, s);

Считывается пустая строка.

    if(s.substr(s.length()-2, 1) == " ")

И идет попытка откуда-то до ее начала подстроку получить...

Дальше даже не смотрел.

READ ALSO
Использование string в функциях scanf и printf

Использование string в функциях scanf и printf

Могут ли функции scanf и printf работать с переменными типа string? Если да, то как это сделать, например, в данном коде?

386
Содержит ли данный код UB

Содержит ли данный код UB

UB вряд ли (хотя пусть это подтвердят гуру в стандартах), но вот огрести так неприятностей - запростоПредставим, что Test запрашивает какой-то...

267
Цвет консоли c++

Цвет консоли c++

Меняю цвет консоли этой строчкой, вопрос вот в чемКак после конкретных манипуляций восстановить дефолтный цвет консоли?

347
Поддержка разных языков

Поддержка разных языков

ЗдравствуйтеПроблема заключается в следующем

316