Вот мой код. Я пытаюсь завершить всю программу, если она переходит во второй оператор if
внутри цикла do-while
. Но каждый раз, когда я запускаю его, он вылетает. Я не уверен, что я делаю неправильно.
#include <iostream>
using namespace std;
int main() {
int myData[10];
for(int i=0;i<10;i++){
myData[i] = 1;
cout<<myData[i];
}
do{
int i;
cout<<endl<<"Input index: ";
cin>> i;
int v;
cout<<endl<<"Input value: ";
cin>>v;
if (i>=0||i<10){
myData[i]=v;
for(int i=0;i<10;i++){
cout<<myData[i]<<" ";
}
}
if (i<0||i>=10){
cout<<"Index out of range. Exit.";
return 0;
}
}while(1);
}
да, я понял, что забыл в своем коде, что у меня есть «return 0;» во втором операторе if. я только что добавил это
Программа должна аварийно завершать работу с ошибкой типа index-out-of-bounds в одном из двух мест, где вы пытаетесь получить доступ к myData[i]=. Я бы проверил ваши счетчики.
Спасибо, Джон, это было так. Я изо всех сил пытался понять, что не поймал эту ошибку. Еще раз спасибо!
@Ryan Для справки в будущем, StackOverflow — это сайт вопросов и ответов, а не служба отладки. Ожидается, что вы будете заниматься отладкой самостоятельно. См., например, Как отлаживать небольшие программы.
@RemyLebeau Я буду помнить об этом, однако я задал вопрос о том, как завершить свою программу, но благодаря комментаторам я понял, что в моем коде была ошибка. Но спасибо, я буду помнить об этом и формулировать свои вопросы лучше в будущем.
if (i>=0||i<10){
Подумайте, какие числа больше нуля или меньше десяти. Я уверен, вы понимаете, что это верно для всех чисел. То, что вы хотели написать, это
if (i>=0&&i<10){
Это объясняет ваш сбой, вы обращаетесь к массиву myData
с индексом, который находится за пределами массива.
Новички очень часто путают &&
и ||
, особенно там, где присутствует отрицание.
Другие люди рассказали вам о проблеме:
if (i>=0||i<10){
Я объясню, почему вы наткнулись на это. Вы попали в нее, потому что не использовали пробелы.
if (i >= 0 && i < 10) {
Пожалуйста, пожалуйста, пожалуйста, ради всего хорошего в мире, используйте пробелы свободно. У вас точно будет меньше ошибок, потому что моя версия гораздо легче читается. Кроме того, если вы работаете со старыми разработчиками (такими как я), нам действительно будет намного легче читать ваш код.
отсутствие пробелов заставило OP использовать неправильный оператор?
Также поможет заключение сравнений внутри скобок: ((i >= 0) && (i < 10))
.
Компилятор не заботится о пробелах
Хотя я согласен, что пробелы (и хорошее форматирование в целом) облегчают чтение кода, я не понимаю, как это относится к OP. Больше комментарий, чем ответ.
Отсутствие пробела делает || оператора НАМНОГО труднее увидеть. Насекомые прячутся, когда наши глаза не могут их сразу заметить. Это точно, почему была ошибка? Возможно, нет, но это помогло мне дважды прочитать код, прежде чем я его увидел.
if (i>=0||i<10){
Подумайте, какие числа больше нуля или меньше десяти. Я уверен, вы понимаете, что это верно для всех чисел. Вы хотели написатьif (i>=0&&i<10){