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

Почему переход в начало происходит только 1 раз?

11.07.2018, 15:54. Показов 912. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята нужна помощь, почему переход в начало происходит только 1 раз????


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
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> 
#include <conio.h>
using namespace std;
void abc(double a, double b, double c, int key, char znak,p)
{
    setlocale(LC_ALL, "rus");
    link:
    cout << "A+B=C" << endl;
    cout << "Введите число A:";
    cin >> a;
    cout << "Введите число B:";
    cin >> b;
    cout << "Введите знак(+,-,*,/):";
    cin >> znak;
    switch (znak)
    {
    case '+': { c = a + b; cout << a << "+" << b << "=" << c << endl; break; }
    case '-': { c = a - b; cout << a << "-" << b << "=" << c << endl; break; }
    case '*': { c = a * b; cout << a << "*" << b << "=" << c << endl; break; }
    case '/': { c = a / b; cout << a << "/" << b << "=" << c << endl; break; }
    }
    cout << "Что-бы продолжить нажмите Enter, что-бы закрыть програму нажмите Esc\n";
    key= _getch();
    cin >> ;
    switch (key)
    {
    case 13: {goto link; key = 0; break; }
    case 27: {exit; break;}
    }
}
int main()
{
    int key = 0;
    char znak = 0;
    double a = 0;
    double b = 0;
    double c = 0;
    setlocale(LC_ALL, "rus");
    abc(a, b, c, key, znak);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2018, 15:54
Ответы с готовыми решениями:

Событие происходит только один раз
Простой тестовый код: namespace ConsoleApplication7 { public delegate void...

Почему смена текста работает только один раз? Что неправильно в коде и почему?
Нужно чтобы при щелчке мыши на поверхности кнопки текст метки Label изменялся на текст окна...

Цикл должен выполниться несколько раз, и должна получиться таблица, но этого не происходит; почему?
Данная программа не выполняется корректно, т.е. по заданию мне нужно создать таблицу с числами, вы...

Почему происходит инициализация только первого элемента динамического массива структуры?
Здравствуйте. Я пишу программу для табулирования функции cos(x). Аргументы и значение функции нужно...

2
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
12.07.2018, 13:49 2
Цитата Сообщение от Psihotreningg Посмотреть сообщение
goto link
goto в структурном программировании не применяют (за исключением ситуаций, когда требуется исключительная оптимизация). Учитесь пользоваться циклами while, do...while, for


А чтобы понять, почему возврат был только один, посмотрите, что выводит на экран эта программа при нажатии клавиш и посмотрите какие значения key обрабатывает ваш оператор switch.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int a;
 
    while (true)
    {
        a = _getch();
        cout << a << endl;
    }
}
1
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
13.07.2018, 10:17 3
Лучший ответ Сообщение было отмечено Psihotreningg как решение

Решение

Цитата Сообщение от QuakerRUS Посмотреть сообщение
goto в структурном программировании не применяют (за исключением ситуаций, когда требуется исключительная оптимизация)
Немного не так.
Для перехода назад по коду goto не нужен никогда.
Для перехода вперед он изредка применяется для выхода из вложенных циклов, для обработки ошибок (вместо вложенных if'ов) и еще для чего-то, с ходу не вспомню.
Вот там он повышает и наглядность кода, и скорость работы. А при прыжках назад он не имеет ровно никаких преимуществ перед циклами.
Цитата Сообщение от Psihotreningg Посмотреть сообщение
switch (key)
{
case 13: {goto link; key = 0; break; } //кстати, сначала прыгаете в начало, а потом пытаетесь занулить кнопку. А потом еще и завершить блок switch. Ничего что этот код не выполнится никогда, поскольку оттуда уже упрыгали?
case 27: {exit; break;}
}
У вас форматирование убежало, поправили бы. Внутри блока должен быть отступ. А фигурные скобки внутри case...break не обязательны. Собственно, break в данном случае тоже не нужен:
C
1
2
3
4
switch(key){ //открывающая скобка на той же строке, что начало блока это вкусовщина, перенос ее на следующую строку не сделает код ни лучше, ни хуже
  case KEY_RETURN: key=0; continue; //continue - вернуться к началу цикла
  case KEY_ESC: return; //ах да, еще рекомендую использовать именованные константы. Коды клавиш - штука непостоянная
}
1
13.07.2018, 10:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2018, 10:17
Помогаю со студенческими работами здесь

Почему функция срабатывает только 1 раз
Тесть после 5 сек выводится google но через следующие 5 сек почемуто google так и остается а должно...

Я не понимаю почему работает только один раз
по идеи код должен выполнятся бесконечность раз, но почему то работает только один раз почему?? ...

Почему InvokeRepeating отрабатывает только один раз?
Здравствуйте! Изучаю Unity3D и наткнулся на интересный туториал:...

Почему код запускается только один раз?
Всем привет. Кто знает почему этот код запускается только 1 раз? $(function() {...


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

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