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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2018, 15:24   #1
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
Радость Как сделать так, чтобы программа завершалась при вводе символа.

Программа работает, только одно НО. По условию упражнения она должна завершать работу при вводе символа q или другого нечислового значения:

Код:
#include <stdio.h>  /*Эта программа переводит температуру по Фаренгейту в температуру по Цельсию и Кельвину*/

void Temperatures(double F);
int main(void)
{
        double temp_far;
        printf("Введите значение температуры по Фаренгейту: ");
        scanf("%lf", &temp_far);
        while(temp_far < 1000)
        {
        Temperatures(temp_far);
        printf("Для следующей операции введите значение температуры в Фаренгейтах: ");
        scanf("%lf", &temp_far);
        }
        printf("Готово\n");
        return 0;
}
void Temperatures(double F)
{
        const double rate = 5.0 / 9.0;  /*Температура по Цельсию = 5.0/9.0 х (температура по Фаренгейту - 32.0)*/
        const double deviation = 32.0;
        const double deviationK = 273.16; /*Температура по Кельвину = температура по Цельсию + 273.16*/
        double C, K;
        C = rate * ( F - deviation);
        K = C + deviationK;
        printf("%.2fF - это %.2fC и %.2fK\n", F, C, K);
}
Нужно как-то преобразовать этот оператор.
Код:
while(temp_far < 1000)
В упражнении есть подсказка, что функция scanf() возвращает количество прочитанных ею элементов. И она возвратит 1, если прочитает число, но не возвратит, если я введу 'q'. Операция == выполняет проверку на равенство, так что ее можно применять для сравнения возвращаемого значения scanf() с 1.

Однако, код
Код:
while(temp_far == 1)
не дал нужно результата. Программа завершает работу, даже если я ввожу числовое значение.

Спасибо.
Sinli вне форума Ответить с цитированием
Старый 10.09.2018, 15:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так надо проверять возвращаемое значение функции, а не значение параметра.
p51x вне форума Ответить с цитированием
Старый 10.09.2018, 16:08   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я бы попробовал такой код:
Код:
        double temp_far;
        printf("Введите значение температуры по Фаренгейту: ");
        int clen = scanf("%lf", &temp_far);
        while(clen > 0)
        {
	Temperatures(temp_far);
	printf("Для следующей операции введите значение температуры в Фаренгейтах: ");
	clen = scanf("%lf", &temp_far);
        }
        printf("Готово\n");
        return 0;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.09.2018, 16:16   #4
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию

Большое спасибо.
Переделал таким образом:
Код:
#include <stdio.h>  /*Эта программа переводит температуру по Фаренгейту в температуру по Цельсию и Кельвину*/

void Temperatures(double F);
int main(void)
{
        double temp_far;
        printf("Введите значение температуры по Фаренгейту: ");

        while(scanf("%lf", &temp_far) == 1)
        {
        Temperatures(temp_far);
        printf("Для следующей операции введите значение температуры в Фаренгейтах: \n"
                        "Для выхода - любой нечисловой символ: \n");
        }
        printf("Готово\n");
        return 0;
}
void Temperatures(double F)
{
        const double rate = 5.0 / 9.0;  /*Температура по Цельсию = 5.0/9.0 х (температура по Фаренгейту - 32.0)*/
        const double deviation = 32.0;
        const double deviationK = 273.16; /*Температура по Кельвину = температура по Цельсию + 273.16*/
        double C, K;
        C = rate * ( F - deviation);
        K = C + deviationK;
        printf("%.2fF - это %.2fC и %.2fK\n", F, C, K);
}
работает так, как требуется в упражнении.
На ваше мнение данный код выглядит корректно?
Просто впервые встречаю такое, что в while можно впихивать такую конструкцию:
Код:
while(scanf("%lf", &temp_far) == 1)
Sinli вне форума Ответить с цитированием
Старый 10.09.2018, 16:18   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Какую такую? Чем это не условие?
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы курсор передвигался автоматически по нужным нам ячейкам при вводе данных rikotiko Microsoft Office Excel 2 28.10.2012 04:45
Как сделать чтобы выдавало сообщение при неправильном вводе? jawa250t БД в Delphi 2 10.04.2012 12:19
Как сделать так чтобы моя программа при включении отображалась в панели задач, как например часы Window ? asked86 Win Api 1 15.12.2008 08:42
Как сделать чтобы при вводе в Memo появлялись скролинги вертиклаьный и горизонтальный? Sanek777 Общие вопросы Delphi 2 19.11.2008 17:09