Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
1

Не выводить сообщение об ошибке, прописанной в функции

04.09.2018, 15:21. Показов 843. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. Консольный морской бой.
Есть функция проверки координат. Если ошибка есть, то в этом блоке if сработает cout.
Дело в том, что эту функцию в программе использую в разных случаях. И иногда мне не нужно, чтобы выводились сообщения об ошибке (например, эта функция также используется для автоматического размещения кораблей). Можно как-то решить эту проблему не переписывая функцию заново без строки об ошибке?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
bool Check::check_234Cells (char **&array, int &x, int &y)
{//проверка заполнения остальных клеток кораблей после первой
    if (y < 1 || y > 10 || x < 1 || x > 10) 
    {
        cout << "\nObserve the boundaries of the field!";
        return false;
    }
    
    int count = 0;
    for (int i = x-1; i < x+2; ++i)
    {
        if (i < 1 || i > 10) continue;
        for (int j = y-1; j < y+2; ++j)
        {
            if (j < 1 || j > 10) continue;
            
            if (array[x][y] != '-')
            {
                cout << "\nThis point occupied!";
                return false;   
            }
            
            else if (array[i][j] == '3' || array[i][j] == '4' || array[i][j] == '2' || array[i][j] == '1')
            {
                count ++;
                if (count > 1)
                {
                    cout << "\nWrong location!";
                    return false;
                }
            }
        }
    }
 
    return true;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2018, 15:21
Ответы с готовыми решениями:

Как выводить сообщение об ошибке на форму из файла обработчика
есть 2 формы (регистрация и авторизация) и есть 2 файла обработчика. На каждой форме есть div с...

Написать функцию. Функция должна выводить сообщение об ошибке, если было введено два слова и более
Если непонятно задание, то напишу подробнее.

Как не выводить на экран сообщение об ошибке выполнения макрокоманды, при нажатии кнопки "Отмена"?
При нажатии на форме кнопки запускается макрос, который в свою очередь вызывает запрос, например...

Сообщение об ошибке "Имя... не распознано как имя командлета, функции, файла сценария..." при вызове функции
Добрый день уважемые коллеги. Написал простой скрипт который мониторит создались ли файлы с...

8
online
51 / 34 / 16
Регистрация: 11.02.2018
Сообщений: 221
04.09.2018, 15:47 2
Джон Кофи, проще будет перенести создание кораблей в отдельную функцию.
Это правильнее, чтобы не конфликтовали условные операторы.
0
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
04.09.2018, 16:02  [ТС] 3
Цитата Сообщение от Mike_Boone Посмотреть сообщение
чтобы не конфликтовали условные операторы
не конфликтуют. Дак можно так сделать или нет, чтобы не выводилось это сообщение? Просто писать еще раз абсолютно такую же функцию, как-то не очень по-моему)
0
online
51 / 34 / 16
Регистрация: 11.02.2018
Сообщений: 221
04.09.2018, 16:04 4
Джон Кофи,
C++
1
 if .... else if .....
Сейчас с твоим кодом поработаю. Сам сделаю мб, если не сможешь
Сам исходник программы то скинь(main и прочие функции). Я не понимаю, где создание кораблей, игровой процесс...
0
165 / 114 / 59
Регистрация: 12.07.2018
Сообщений: 277
04.09.2018, 16:05 5
Джон Кофи, можно возвращать как результат функции не true/false, а текст сообщения об ошибке (если ошибки нет - возвращать пустую строку). В том случае, когда должно быть выведено сообщение, выводить его, в противном случае просто анализировать текст сообщения на пустую строку, чтобы проверить, было ли размещение успешным.
0
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
04.09.2018, 16:10  [ТС] 6
Цитата Сообщение от Mike_Boone Посмотреть сообщение
if .... else if .....
не понял, что вы этим сказать хотите.
Подробнее поясню. В main-е выбор реализован - в ручную корабли расставить или автоматически. Функция эта используется для проверки заполнения остальных клеток кораблей после первой. Также ее удобно применять и для автоматического заполнения. Только в случае ошибок, в консоль будут кидаться сообщения о них, а это некрасиво, как минимум.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
04.09.2018, 16:12 7

Не по теме:

Хмм. Я бы выразился в том смысле, что (имхо) тут допущена архитектурная ошибка. Функция выполняет сразу две функции (да, тавтология, ну да ладно уж):
1. проверяет координаты и возвращает true/false как результат,
2. выводит текстовое сообщение об ошибке.
Зачем смешивать две функции? А если в дальнейшем понадобится проверять какие-то другие координаты и выводить еще какое-нибудь ругательное сообщение? Что, снова переписывать?
Я бы рекомендовал разделить эту функцию на две. Одна только проверяет координаты и возвращает true/false, другая только выводит диагностику. Но это, конечно, потребует переписывания функции.

По сути вопроса:
можно обойтись без большого переписывания, если функция будет возвращать структуру, содержащую флаг успешности true/false и текстовую строку сообщения об ошибке (в случае успеха - пустую строку или "OK"). Но это костыль, и смысла в его применении нет.
0
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
04.09.2018, 16:17  [ТС] 8
Бард, когда корабль размещен верно, сообщения у меня и не выводится... Меня просто не так поняли. Сейчас попробую залить скрин.

Добавлено через 1 минуту
Цитата Сообщение от CheshireCat Посмотреть сообщение
Я бы рекомендовал разделить эту функцию на две. Одна только проверяет координаты и возвращает true/false, другая только выводит диагностику. Но это, конечно, потребует переписывания функции.
просто хочется не делать длинного кода... ладно, я в общем-то понял, что все предлагают не пихать сообщение в эту функцию. Буду думать

Добавлено через 2 минуты
изначально у меня эти сообщения находились вне функции. Но они занимали в итоге большое количество строк, код был хуже читаем. И поэтому я их написал в функции, стало намного удобнее. Но вот сделав авторасстоновку, выглядит теперь не очень.
Миниатюры
Не выводить сообщение об ошибке, прописанной в функции  
0
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
04.09.2018, 16:24  [ТС] 9
на скрине видно два сообщения об ошибках
0
04.09.2018, 16:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2018, 16:24
Помогаю со студенческими работами здесь

сообщение об ошибке
Помогите разобраться в следующей ошибке и решить эту проблему...

Сообщение об ошибке
import java.util.Arrays; import java.util.Scanner; public class Main { public static void...

сообщение о ошибке
Active X Component cant create object-что означает это сообщение?

Сообщение об ошибке
Эта формула находится в вычисляемом поле: @If(@Middle(PrefixNew;0;2) = &quot;80&quot;; Prefix2 :=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru