С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37

Не выполняется логический оператор &&

28.06.2017, 10:39. Показов 3242. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. В данном коде
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <string>
#include <cstdlib>
 
 
using namespace std;
int main(){
    setlocale (LC_ALL, "");
    system ("color 0a");
 
    // ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ;
    string approve;
    char log;
    char pass;
    int count = 0; //счетчик кол-ва попыток входа;
 
Begin1:
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << "|    ПРОГРАММА ВВОДА ДАННЫХ ОБ КОМПЬЮТЕРАХ    |" << endl;
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << endl;
    std::cout << ">> LARSSON Ltd.," << endl;
    std::cout << "Пожалуйста авторизуйтесь в системе!";
    std::cout << endl;
    log = '1';
    std::cout << "Вы согласны? (yes/no): ";
    std::cin >> approve;
    if (approve == "yes" || approve=="y") {goto yes;}
    if (approve == "no" || approve=="n")  {goto no;}
    if (!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) {goto eRo1;}
    if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
eRo1:
        cout << endl;
        system ("cls");
        cout << "******************************************" << endl;
        cout << "**** СООБЩЕНИЕ ОБ ОШИБКЕ ВВОДА ДАННЫХ ****" << endl;
        cout << "******************************************" << endl;
        cout << endl;
        cout << "ВЫБРАН НЕСУЩЕСТВУЮЩИЙ ВАРИАНТ ОТВЕТА" << endl;
        cout << endl << endl;
        count ++;
        cout << "Количество попыток ввода данных: " << count << endl;
        goto Begin1;
eRo2:
        system ("cls");
        cout << ">>>>>>> Сообщене о превышении числа счетчика";
        cout << endl;
        cout << "Вы превысили допустимое количество попыток ввода данных" << endl;
        system ("echo Нажмите любую клавишу");
        system ("pause");
        count = 0;
        goto Begin1;
 
yes: {
        cout <<" Вы выбрали " << approve << endl << log << endl;
        return 0;
        }
no: {
        cout << "Вы отказались " << approve << endl;
        return 0;}
}
не выполняется строка
C++
1
if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
По идее, если вводить неправильное значение, а так же при достижении числа попыток 4 (count =4) программа должна передавать управление на eRo2, а count должен быть снова равен 0. Но управление переходит на eRo1, а count постоянно увеличивается.

Добавлено через 7 минут
Нашел в чем причина. Я поменял местами
C++
1
2
 if (!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) {goto eRo1;}
 if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2017, 10:39
Ответы с готовыми решениями:

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A ...

Чем оператор || отличается от оператора && ?
Приведите простые примеры, никак до мозгов не доходит)

Оператор if и логическая операция И (AND) &&
Вод подскажите что будет быстрей обрабатываться процессором: if(!a&amp;&amp;!b) { a+b; } или

33
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 10:41
Зачем вы используете метки? Без них код и лучше смотрится и легче читается.

И он у вас явно не дойдет до этого условие, т.к изначально проверяется предыдущее - и оно изначально будет True -> выполнение eRo1.

Поменяйте местами условия
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,202
28.06.2017, 10:42
Цитата Сообщение от alexey15 Посмотреть сообщение
не выполняется строка
А как она вообще может выполняться, если предыдущая строка "перехватывает" все возможные варианты?
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 10:50  [ТС]
Если честно, то СИ++ я начал изучать 2 недели назад. А до этого активно пользовался BASIC. Причем даже не Visual Basic, а Qbasic. Там метки для профессионального программирования желательны к использованию.
Без них мне очень сложно пока что читать код. Они для меня являются точкой опоры при просмотре кода. Для меня морально очень важно иметь возможность передать управление на любую строку, т.к. я люблю писать большие объемы программ. Понимаю, что и без меток это возможно, но от Бэйсика просто так не отлипнешь.

Добавлено через 2 минуты
Еще я очень люблю метод GOSUB-RETURN. Но здесь я подобного еще не проходил, не знаю. Но мне без него очень сложно пока что
0
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 11:01
Вам знакомы "Процедуры", "Функции"?
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 11:03  [ТС]
Я слышал о них, но еще не изучал. Как я понял, это своеобразная имитация подпрограмм. Как их использовать, еще пока не знаю, но если бы вы объяснили мне на пальцах, как их использоваться, было бы здорово.
0
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 11:07
alexey15, Обязательно изучите их, на ютубе куча-куча материала по этому. Это основа-основ, без этого - очень тяжело будет в будущем, тем более при изучении ООП.

Если очень коротко. Вы можете eRo1, eRo2 и т.д разбить на подпрограммы, которую будете вызывать с помощью имени этой процедуры/функции. Почти тоже самое, что и метка, но не со всем...

Не умею я объяснять, к сожалению) Посмотрите ролик в ютубе - можно самый короткий (минут 10) - там все расскажут и покажут.

Метки вообще не используются в программировании (Ну может если очень редко).
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 11:16  [ТС]
Вы бы смогли изменить текст моей программы, чтобы вместо меток были функции/процедуры? Мне гораздо проще анализировать код.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.06.2017, 12:20
Цитата Сообщение от alexey15 Посмотреть сообщение
GOSUB-RETURN.
это аналог "функций" на с++
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 13:04  [ТС]
Goto позволяет прыгать по программе, не возвращаясь обратно. Я так понял, что процедура и функция в СИ++ сами по себе подразумевают возврат в исходную точку. Но можно ли из самой процедуры/функции выпрыгнуть в другое место программы? И как это сделать?
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <string>
#include <cstdlib>
 
void message ();
using namespace std;
int main(){
    setlocale (LC_ALL, "");
    system ("color 0a");
 
    // ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ;
    string approve;
    char log;
    char pass;
    int count = 0; //счетчик кол-ва попыток входа;
 
Begin1:
    message ();
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << "|    ПРОГРАММА ВВОДА ДАННЫХ ОБ КОМПЬЮТЕРАХ    |" << endl;
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << endl;
    std::cout << ">> LARSSON Ltd.," << endl;
    std::cout << "Пожалуйста авторизуйтесь в системе!";
    std::cout << endl;
    log = '1';
    std::cout << "Вы согласны? (yes/no): ";
    std::cin >> approve;
    if (approve == "yes" || approve=="y") {goto sProg;}
    if (approve == "no" || approve=="n")  {goto nProg;}
    if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
    if (!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) {goto eRo1;}
eRo1:
        cout << endl;
        system ("cls");
        cout << "******************************************" << endl;
        cout << "**** СООБЩЕНИЕ ОБ ОШИБКЕ ВВОДА ДАННЫХ ****" << endl;
        cout << "******************************************" << endl;
        cout << endl;
        cout << "ВЫБРАН НЕСУЩЕСТВУЮЩИЙ ВАРИАНТ ОТВЕТА" << endl;
        cout << endl << endl;
        count ++;
        cout << "Количество попыток ввода данных: " << count << endl;
        goto Begin1;
eRo2:
        system ("cls");
        cout << ">>>>>>> Сообщене о превышении числа счетчика";
        cout << endl;
        cout << "Вы превысили допустимое количество попыток ввода данных" << endl;
        system ("echo Нажмите любую клавишу");
        system ("pause");
        count = 0;
        goto Begin1;
 
sProg: {
        cout <<" Вы выбрали " << approve << endl << log << endl;
        return 0;
        }
nProg: {
        cout << "Вы отказались " << approve << endl;
        return 0;}
}
void message ()
{
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << "|    РАБОТАЕТ ПОДПРОГРАММА                    |" << endl;
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << endl;
    std::cout << endl;
    goto eRo1;
}
Компилятору не нравится предпоследняя строчка goto eRo1;
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
28.06.2017, 13:47
Цитата Сообщение от Sergey_Davydovs Посмотреть сообщение
Метки вообще не используются в программировании (Ну может если очень редко).
Вы, видимо, не знакомы с ассемблерами.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.06.2017, 14:10
Цитата Сообщение от alexey15 Посмотреть сообщение
Но можно ли из самой процедуры/функции выпрыгнуть в другое место программы?
внутри одной функции можно прыгать только внутри этой самой функции.
прыгать в произвольное место программы стандартным способом нельзя.
но если очень сильно хочется - то можно,
однако вам такими хаками заниматься не нужно.

вам нужно переписать программу без использования goto.
и приучать себя к хорошей культуре программирования.
1
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 14:12
В лс напишите, вечером попробую объяснить и перепишем код вместе.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
28.06.2017, 14:14
Эх, а че там, процедуры/функции... Даешь лонгджамп, подмену адреса возврата и вообще колл-сс
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 14:40  [ТС]
вам нужно переписать программу без использования goto.
и приучать себя к хорошей культуре программирования
А чем моя культура программирования плохая?...
Единственные доводы против, которые я нашел в интернете указывают только на тяжелочитаемый код. Но тут уж как программист сам захочет, так и напишет. Можно и с ипользованием goto написать очень приятный глазу текст, а можно и с использованием процедур\функций наворотить так, что разбираться нужно будет целой командой.
В конце концов Вы же быстро разобрались в тексте моей программы.

Добавлено через 13 минут
Если честно, то для меня даже такие метки, как в этой программе немного не привычны. Я всегда нумеровал каждую строку программы. Таким образом у меня была возможность передать управление куда угодно. Раньше я фанател программированием очень сильно, я садился и писал программу, любую. Идея о том, что она будет делать рождалась по ходу пьесы. Поэтому я не всегда представлял себе ее структуру и где какие будут подпрограммы, поэтому метки были спасением, т.к. часто приходилось все допиливать.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.06.2017, 14:55
Как сказал Дейкстра,
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию
goto стоит использовать только в очень узком кругу задач, когда это действительно повысит читаемость. Например, выход из циклов множественной вложенности (хотя такой код и без goto отдаёт душком). Глядя на ваш код становится понятно, почему большинство предпочитает новичкам вообще запретить его использование. В вашем случае goto явно не повысил читаемость.

Добавлено через 1 минуту
Цитата Сообщение от alexey15 Посмотреть сообщение
Но тут уж как программист сам захочет, так и напишет
А потом другим программистам этот код читать/править. Прилагая ненужные усилия к пониманию сути написанной вермишели.
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 15:04  [ТС]
Я посмотрел как использовать процедуры и функции. Получается, что вместо goto я могу поставить имя_процедуры\функции. Тогда вместо метки будет стоить void имя_метки (аргументы (при наличии)) {}. Это имитации работы подпрограммы в BASIC.
Но ведь получается, что программисту, который будет читать текст программы будет все равно, будет там стоять goto или имя_процедуры/функции (кстати, как правильно это называется?). Он же все равно не поймет в чем ее суть, пока не спуститься на эту метку и не посмотрит суть этого участка программы. Или я все неправильно понял?
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
28.06.2017, 15:05
Цитата Сообщение от alexey15 Посмотреть сообщение
Если честно, то для меня даже такие метки, как в этой программе немного не привычны. Я всегда нумеровал каждую строку программы. Таким образом у меня была возможность передать управление куда угодно. Раньше я фанател программированием очень сильно, я садился и писал программу, любую. Идея о том, что она будет делать рождалась по ходу пьесы. Поэтому я не всегда представлял себе ее структуру и где какие будут подпрограммы, поэтому метки были спасением, т.к. часто приходилось все допиливать.

Вам нужно либо срочно переучиваться, либо сменить сферу интересов на ту, где проектирование не так важно.

Функция принимает четкие аргументы, обрабатывает и возвращает конкретный результат. А не скачет как ей вздумается. Поэтому это не одно и то же. >_<
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 15:09  [ТС]
Но я это и пытаюсь сделать, я слышал что basic менее функционален, чем си++. Поэтому я переучиваюсь. Но в начале своего обучения раньше я понимал зачем нужен каждый оператор и какого его применение. Для меня плохой стиль программирования ограничивался понятием плохо читаемого текста программы, а не применением каких-то запрещенных операторов.
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
28.06.2017, 15:15
Стивен Прата, "Язык программирования С++. Лекции и упражнения" в шестом издании 283 страница, прочитай и прекрати юзать этот рудимент.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2017, 15:15
Помогаю со студенческими работами здесь

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

Почему условие "a && b == 0" не выполняется?
решил вспомнить c++, начал что то писать и непонятка void __fastcall TForm1::Button1Click(TObject *Sender) { int a=0,b=0,s=0; ...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

Оператор &&
В C# при использовании оператор &amp;&amp;, если первая операция будет false, то проверка второй операции не выполняется. А как записать на С++...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru