C++: преобразование градусов Цельсия в градусы Фаренгейта

Модератор: Модераторы разделов

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

NickLion писал(а):
17.05.2014 18:30
4.1.3 — это официальная версия? Не вижу такой.

Трудно сказать.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

NickLion писал(а):
17.05.2014 18:30
Ну, а запустить из (g)vim можно и отдельным xterm:
:!xterm -e 'executable-file-name; sleep 10'

А где конкретно это прописать в .gvimrc? Запуск программы по F9 у меня сейчас выглядит следующим образом:

Код: Выделить всё

function! BindF9_C()
    if filereadable("Makefile")
        set makeprg=make
         map <f9>      :w<cr>:make<cr>:cw<cr>:!./%<<cr>
        imap <f9> <esc>:w<cr>:make<cr>:cw<cr>:!./%<<cr>
    else
         map <f9>      :w<cr>:make %:r<cr>:cw<cr>:!./%<<cr>
        imap <f9> <esc>:w<cr>:make %:r<cr>:cw<cr>:!./%<<cr>
    endif
endfunction
au FileType c,cc,cpp,h,hpp,s call BindF9_C()
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

Замените :!./% на, например, :!xterm -e './%; read'
read — ждать ввода, можно sleep поставить, как удобнее будет.
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

NickLion писал(а):
18.05.2014 10:07
Замените :!./% на, например, :!xterm -e './%; read'
read — ждать ввода, можно sleep поставить, как удобнее будет.

/bin/bash: -c: line 0: syntax error near unexpected token `newline'
/bin/bash: -c: line 0: `xterm -e './Документы/CPP/conversion.cpp; read'<'
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

Подправил .gvimrc (попутно выяснив, что xterm в CentOS отсутствует):

Код: Выделить всё

function! BindF9_C()
    if filereadable("Makefile")
        set makeprg=make
         map <f9>      :w<cr>:make<cr>:cw<cr>:!gnome-terminal -e './%; read'<cr>
        imap <f9> <esc>:w<cr>:make<cr>:cw<cr>:!gnome-terminal -e './%; read'<cr>
    else
         map <f9>      :w<cr>:make %:r<cr>:cw<cr>:!gnome-terminal -e './%; read'<cr>
        imap <f9> <esc>:w<cr>:make %:r<cr>:cw<cr>:!gnome-terminal -e './%; read'<cr>
    endif
endfunction
au FileType c,cc,cpp,h,hpp,s call BindF9_C()

Но в итоге терминал запустился в следующем виде:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

В первом, там не %, а %<, не заметил.
У gnome-terminal ключи могут быть другие. Посмотрите справку по gnome-terminal.
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

Установил xterm, но при запуске по F9 было выдано:
Warning: Cannot convert string "nil2" to type FontStruct
xterm: cannot load font -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-is
o10646-1


При этом xterm запустился, но в его окне было лишь: bash: ./ /CPP/conversion.cpp:
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

Так выглядит?

Код: Выделить всё

function! BindF9_C()
    if filereadable("Makefile")
        set makeprg=make
        map <f9>      :w<cr>:make<cr>:cw<cr>:!xterm -e './%<; read'<cr>
        imap <f9> <esc>:w<cr>:make<cr>:cw<cr>:!xterm -e './%<; read'<cr>
    else
        map <f9>      :w<cr>:make %:r<cr>:cw<cr>:!xterm -e './%<; read'<cr>
        imap <f9> <esc>:w<cr>:make %:r<cr>:cw<cr>:!xterm -e './%<; read'<cr>
    endif
endfunction
au FileType c,cc,cpp,h,hpp,s call BindF9_C()

У меня так норм запускается.
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

NickLion писал(а):
18.05.2014 14:30
Так выглядит?

Код: Выделить всё

function! BindF9_C()
    if filereadable("Makefile")
        set makeprg=make
        [b]map <f9>      :w<cr>:make<cr>:cw<cr>:!xterm -e './%<; read'<cr>
        imap <f9> <esc>:w<cr>:make<cr>:cw<cr>:!xterm -e './%<; read'<cr>[/b]
    else
        [b]map <f9>      :w<cr>:make %:r<cr>:cw<cr>:!xterm -e './%<; read'<cr>
        imap <f9> <esc>:w<cr>:make %:r<cr>:cw<cr>:!xterm -e './%<; read'<cr>[/b]
    endif
endfunction
au FileType c,cc,cpp,h,hpp,s call BindF9_C()

У меня так норм запускается.

Поставил < перед './% в итоге выдаётся сообщение:
Warning: Cannot convert string "nil2" to type FontStruct
xterm: cannot load font -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-is
o10646-1

При этом в окне xterm видны лишь вводимые числа, текста сообщений не видно.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

NickLion писал(а):
18.05.2014 14:30
Так выглядит?

Код: Выделить всё

function! BindF9_C()
    if filereadable("Makefile")
        set makeprg=make
        map <f9>      :w<cr>:make<cr>:cw<cr>:!xterm -e './%<; read'<cr>
        imap <f9> <esc>:w<cr>:make<cr>:cw<cr>:!xterm -e './%<; read'<cr>
    else
        map <f9>      :w<cr>:make %:r<cr>:cw<cr>:!xterm -e './%<; read'<cr>
        imap <f9> <esc>:w<cr>:make %:r<cr>:cw<cr>:!xterm -e './%<; read'<cr>
    endif
endfunction
au FileType c,cc,cpp,h,hpp,s call BindF9_C()

У меня так норм запускается.

А в МСВС работает нормально.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

Насколько я понимаю, это уже в xterm проблема. Он там на шрифты что-то ругается.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение drBatty »

ArkanJR писал(а):
17.05.2014 09:34
Но остался вопрос: почему в МСВС для system("clear"); не требуется подключение заголовочного файла stdlib.h в отличие от CentOS 6?

потому что в разных системах нужно СВОЙ ман читать. И если в мане написано #include <stdlib.h>, значит НУЖНО. Или юзать autotools, которая сама проверяет в ./configure.
ArkanJR писал(а):
17.05.2014 13:38
открывается окно xterm, в котором данная программа корректно выполняется. Нельзя ли организовать подобное в vim?

1. :!xterm -e %
2. повесить это на F9
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
ArkanJR
Сообщения: 1132

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение ArkanJR »

С учётом указанных выше рекомендаций, привёл код программы к следующему виду:

Код: Выделить всё

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("clear");
double nNCelsius;
cout << "\x1B[32;1mВведите температуру по Цельсию:\x1B[0m ";
cout << "\x1B[33;1m";
cin >> nNCelsius;
cout << "\x1B[0m";
double nFahrenheit;
nFahrenheit = 1.8 * nNCelsius + 32;
cout << "\x1B[32;1mТемпература по Фаренгейту:\x1B[0m ";
cout << "\x1B[33;1m";
cout << nFahrenheit;
cout << "\x1B[0m";
return 0;
}

Во время работы полученного бинарика обратил внимание, что при вводе некорректного значения переменной nNCelsius, например, два, данная переменная обнуляется и выводится результат: 32.

Каким образом можно реализовать возможность вывода сообщения "Ошибка!", при вводе некорректного значения?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.

© Г. Уэллс "Человек-невидимка"
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение Bizdelnick »

https://stackoverflow.com/questions/1344516...r-numeric-input
Don't use token extraction (>>) for primary parsing. Once the extraction fails, your primary input is left in an unspecified state, which is terrible.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

Bizdelnick, это более чем спорное мнение.

ArkanJR, нпример, так:

Код: Выделить всё

#include <iostream>

int main()
{
    double n;
    std::cin >> n;
    if (std::cin.fail()) {
        std::cout << "Oops!" << std::endl;
        std::cin.clear();
        std::cin.sync();
    }
    return 0;
}
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение drBatty »

ArkanJR
лично я согласен с вышеприведённой цитатой
Bizdelnick писал(а):
31.05.2014 14:33
Don't use token extraction (>>) for primary parsing. Once the extraction fails, your primary input is left in an unspecified state, which is terrible.

я бы написал свою функцию, которая принимает байты, и переводит их в число. Это несложно, и в процессе написания вы узнаете много нового.

NickLion
не делайте из программиста пхпшника. Почему сразу не послать его учить пхп?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение Bizdelnick »

NickLion писал(а):
31.05.2014 23:21
это более чем спорное мнение

За что купил - за то продал, в C++ не силён.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

drBatty писал(а):
01.06.2014 10:37
я бы написал свою функцию, которая принимает байты, и переводит их в число. Это несложно, и в процессе написания вы узнаете много нового.

Для обучения — норм, а так зачем? Тем более, с конвертацией вещественного числа — та ещё морока будет.

drBatty писал(а):
01.06.2014 10:37
NickLion
не делайте из программиста пхпшника. Почему сразу не послать его учить пхп?

При чём здесь PHP? Это обработка ошибок ввода. Флаг "усё пропало" возвращает .fail(). Проверяем, если что не так — обрабатываем. Можно добавить цикл и заставлять вводить заново, можно зарубить программу. Собственно, что не нравится?
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение drBatty »

NickLion писал(а):
01.06.2014 12:06
Для обучения — норм, а так зачем?

можно подумать, что ТС в продакшене градусы переводит своим кодом!
NickLion писал(а):
01.06.2014 12:06
Тем более, с конвертацией вещественного числа — та ещё морока будет.

ой, да ладно! Переводим число после точки, и делим на 10 в нужной степени. Профит в том, что после этого ТС поймёт, КАК это работает. И в продакшене уже напишет как надо.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение NickLion »

drBatty писал(а):
01.06.2014 13:19
ой, да ладно! Переводим число после точки, и делим на 10 в нужной степени.

Вот-вот. В таком виде точность будет ниже.

drBatty писал(а):
01.06.2014 13:19
Профит в том, что после этого ТС поймёт, КАК это работает. И в продакшене уже напишет как надо.

В этом плане согласен.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: C++: преобразование градусов Цельсия в градусы Фаренгейта

Сообщение drBatty »

NickLion писал(а):
01.06.2014 13:33
Вот-вот. В таком виде точность будет ниже.

ЩИТО? Точность будет достаточна для целей ТСа(даже если допустить, что он датчик в продакшене переводит). Всё равно у float точность ограничена, и погрешность дробной части в любом случае будет не хуже после сложения с целой. Ну а если ТС задумает сделать не так как я сказал(делить не на степень 10, а применит преждевременную оптимизацию, и разделит на 10 для каждой цифры), то будет ему наука на будущее. Что школьная математика так просто в код не перекладывается.
NickLion писал(а):
01.06.2014 13:33
В этом плане согласен.

я только про этот "план" и говорил. Iostream::fail() ему ничего не даст. Это как зазубривание иностранных слов без изучения соответствующего алфавита и синтаксических правил данного языка. Ну как на рынке ценник "капуст 100 рублей"
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: