Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2021, 17:49   #1
kkkrkkk
Новичок
Джуниор
 
Регистрация: 20.08.2021
Сообщений: 5
По умолчанию Как заменить getche() на OSX в Xcode

Здравствуйте!
Начал изучать C++ по учебнику Лафоре и столкнулся с проблемой.
В дальнейшем курсе очень много будет использоваться функция getche(), которая входит в #include <conio.h>, а её, понятное дело, нет на OSX в Xcode.
Пример задачи, переводящей градусы Цельсия в Фаренгейты и наоборот:

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int celc, faren;
    char ch = 'a';
    
    cout << "Нажмите 1 для перевода шкалы Цельсия в шкалу Фаренгейта." << endl
    << "2 для перевода шкалы Фаренгейта в шкалу Цельсия.";
    
    ch = getch();
    switch (ch)
    {
        case 1:
            cout << "Введите температуру по Цельсию: ";
            cin >> celc;
            faren = celc * 9 / 5 + 32;
            cout << "Значение по Фаренгейту: " << faren;
            break;
        case 2:
            cout << "Введите температуру по Фаренгейту: ";
            cin >> faren;
            celc = (faren - 32) * 5 / 9;
            cout << "Значение по Цельсию: " << celc;
            break;
        default:
            cout << "Некорректное значение, попробуйте еще раз.";
            break;
    }
    return 0;
}
Как можно максимально просто и похоже обойти проблему, чтобы дальше заниматься по учебнику?
Я провел в интернете за решением этой проблемы уже около 7 часов, но так и не нашел решения проблемы.

Мне нужно, чтобы вы мне максимально понятно объяснили как сделать эквивалент <conio> либо getch() в Xcode. Чтобы я и в дальнейшем без труда мог их использовать при написании программ.
Заранее благодарю!
kkkrkkk вне форума Ответить с цитированием
Старый 20.08.2021, 17:55   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от kkkrkkk Посмотреть сообщение
Я провел в интернете за решением этой проблемы уже около 7 часов, но так и не нашел решения проблемы.
Серьезно? Да это ж гуглится за секунду... Выкидываете conio и getch/e, и заменяете на getchar и прочее.
ForenLi вне форума Ответить с цитированием
Старый 20.08.2021, 19:48   #3
kkkrkkk
Новичок
Джуниор
 
Регистрация: 20.08.2021
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Серьезно? Да это ж гуглится за секунду... Выкидываете conio и getch/e, и заменяете на getchar и прочее.
Имею в виду, что решения нашел, но ничего не помогло, либо я что-то не так сделал. Лучше, чем посты набивать, помогли бы мне разобраться.
A getchar() по Вашему совету мне ничем не помог.
kkkrkkk вне форума Ответить с цитированием
Старый 20.08.2021, 23:49   #4
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Вот вариант без getch, одна из альтернатив:
Код:
#include <iostream>

using namespace std;

int main()
{
    int ch, celc, faren;
    // char ch = 'a';

    cout << "Press 1 to convert Celsius to Fahrenheit." << endl
         << "2 to convert Fahrenheit to Celsius.";
    // ch = getch();
    cin >> ch;
    if (ch < 0 || ch > 9)
    {
        cin.clear();
        cin.ignore(32767, '\n');
        main();
    }
    else
        switch (ch)
        {
            case 1:
                cout << "Enter the temperature in Celsius: ";
                cin >> celc;
                faren = celc * 9 / 5 + 32;
                cout << "Fahrenheit value: " << faren;
                break;
            case 2:
                cout << "Enter the temperature in Fahrenheit: ";
                cin >> faren;
                celc = (faren - 32) * 5 / 9;
                cout << "Celsius value: " << celc;
                break;
            default:
                cout << "Incorrect value, please try again.\n";
                main();
                break;
        }
    return 0;
}
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 21.08.2021, 09:52   #5
kkkrkkk
Новичок
Джуниор
 
Регистрация: 20.08.2021
Сообщений: 5
По умолчанию

Desc, Спасибо за помощь с программой, я с ней вчера сам разобрался, но дело в том, что я обратился за помощью, чтобы мне дали решение по поводу getch() либо <conio.h>

Ведь очень многие разработчики пишут на OSX, и им явно встречается необходимость использования возможностей getch(). Как они обходятся без неё? Как раз на этот вопрос я и хочу получить ответ.
kkkrkkk вне форума Ответить с цитированием
Старый 21.08.2021, 11:43   #6
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Дело в том что conio.h не входит в состав стандарта плюсов, разработан как дополнение к Windows.
И если нужна функция именно getche(), тогда есть смысл попробовать ch = getchar().
И если не ошибаюсь в OSX переход на новую сроку символ \r, а не \n. Это к тому если запустите мой вариант.

P. S.
Цитата:
Сообщение от kkkrkkk Посмотреть сообщение
Начал изучать C++ по учебнику Лафоре и столкнулся с проблемой.
Вот Вы изначально не верно подошли.
Лафоре в своем учебнике преподносит не изучение С++, а объектно ориентированный подход к программированию. По какой то причине в некоторых примерах приводит объект getche(), видимо ему так было удобно.
С таким же успехом можно использовать объекты например cin, cin.get() со своими специфичными методами. Суть ООП в том что есть объекты и есть методы этих объектов. Объявляется объект для использования его методов.
Т. е. по его книге можно изучать подход к ООП. А сам С\С++ лучше уж по книгам Бьёрн Страуструп, Герберт Шилдт, Стивен Прата, Татьяна Павловская, справочники стандартов и т. д.

P. P. S.
В моем примере ошибка в условии. Должно быть:
Код:
if (ch < 1 || ch > 9)
Будут игнорироваться все не числовые символы и числа не входящие в диапазон от 1 до 9.
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 21.08.2021 в 15:21. Причина: Добавил P. S. А в P. P. S. исправил ошибку
Desc вне форума Ответить с цитированием
Старый 22.08.2021, 21:24   #7
kkkrkkk
Новичок
Джуниор
 
Регистрация: 20.08.2021
Сообщений: 5
По умолчанию

Desc, Спасибо за такой подробный и развёрнутый ответ.
Вы действительно дали мне верное направление. Постараюсь выжать что-то из getchar и cin.get.
Всего хорошего!
kkkrkkk вне форума Ответить с цитированием
Старый 23.08.2021, 11:02   #8
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от kkkrkkk Посмотреть сообщение
Спасибо за помощь с программой, я с ней вчера сам разобрался, но дело в том, что я обратился за помощью, чтобы мне дали решение по поводу getch() либо <conio.h>
Вам его дали, но вы хотите что-то свое.

Цитата:
Сообщение от kkkrkkk Посмотреть сообщение
Ведь очень многие разработчики пишут на OSX, и им явно встречается необходимость использования возможностей getch().
Спокойно. Пишут по станадарту или используют ncurses/...

Цитата:
Сообщение от Desc Посмотреть сообщение
разработан как дополнение к Windows.
Нет. Как часть Turbo C для Ms-DOS
ForenLi вне форума Ответить с цитированием
Старый 23.08.2021, 14:41   #9
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Цитата:
Сообщение от Desc Посмотреть сообщение
разработан как дополнение к Windows.
Нет. Как часть Turbo C для Ms-DOS
Если уж подробно уточнять. Тогда прозвучит примерно так:

Цитата:
В большинство компиляторов языка Си предназначенных для DOS, Windows 3.x, Phar Lap ETS, DOSX, OS/2 и прочих Win32 был включен этот файл. Что обеспечивало включение сопутствующих библиотечных функций в библиотеке Си по умолчанию.

Большинство компиляторов языка Си, предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают включение сопутствующих библиотечных функций.
))
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 23.08.2021, 23:15   #10
kkkrkkk
Новичок
Джуниор
 
Регистрация: 20.08.2021
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Спокойно. Пишут по станадарту или используют ncurses/...
Не могли бы Вы поподробнее рассказать как пользоваться данным инклудом?
Я уже перед этим пытался разобраться с ним, но так и не смог.

Попрошу не писать "читай документацию", потому что я читал, но, так как я новичок в этом деле, то не понял все равно, к сожалению.

Если Вам не хочется объяснять, то не нужно мне писать нравоучительные сообщения, лучше оставьте мою просьбу неотвеченной.
kkkrkkk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить новый framework в Xcode, чтобы не было ошибок? snezhinka1 Мобильные ОС (Android, iOS, Windows Phone) 0 11.11.2017 23:47
Как подключить std_lib_facilities.h к xcode surfingbird Помощь студентам 8 10.07.2017 11:59
getche() sir.andrey Помощь студентам 8 28.06.2011 18:39
Аналог getche() в Linux tim88 Общие вопросы C/C++ 4 13.01.2010 05:37