2016-09-10 3 views
-1

У меня есть эта часть в программепрограммы C++ завершает работу в окнах сравнения полукокса в массив

char size_input[5]={'1','0','4','-'}; 
    for (int i=0;i<6;i++){ 
    cin >> size_input[i]; 
    if(size_input[i]!=char(45)){ 
     valid_size_characters++; 
    }else{ 
     i=6; 
    } 
} 

Он компилируется без ошибок в обоих окнах и Linux, но в окнах, когда программа достигает ту часть это просто сбои, и я понятия не имею, почему

+0

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+1

Измените 'i <6' на' i <5' в условии цикла цикла. –

+0

Вы не сравниваете символ с массивом, как вы говорите в названии. Вы сравниваете два символа. – chris

ответ

2

Это ошибка за один раз, потому что ваш массив имеет размер 5, в то время как цикл работает 6 раз, что приводит к выписыванию границ массива, вызывающих неопределенное поведение. Так должно быть i<5 вместо i<6.

Также избегайте выхода из цикла, манипулируя индексом цикла i, вместо этого вы можете использовать break.

Смежные вопросы