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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2014, 22:13   #1
animator-kun
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 11
По умолчанию для лабораторной работы требуется написать приложение - калькулятор, я использовал бесконечный цикл while для повторного использования калькулятора, однако хотелось бы улучшить оди

добрый день, помогите советом.

для лабораторной работы требуется написать приложение - калькулятор, я использовал бесконечный цикл while для повторного использования калькулятора, однако хотелось бы улучшить один момент, после вывода на экран надписи "To continue, press enter , to exit press q" если нажимать enter, то приходится нажимать эту клавишу несколько раз для перехода на следующую итерацию, хотелось бы ввести проверну на нажатие клавиши enter, как это можно реализовать?

вот код:

// лаба_2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"
#include "math.h"
// для того чтобы учесть переполнение типа int была подключена библиотека limits.h
#include "limits.h"


int _tmain(int argc, _TCHAR* argv[])
{
int ar1, ar2, a;
char sig;
// чтобы приложение не закрывалось сразу же после выполнения выражения, был введен бесконечный цикл while c условием выхода при нажатии клавиши q
while(true)
{

printf("Enter expression \n");
// оператор flushall() очищает буфер, из которого берет данные scanf
flushall();
scanf("%d%c%d", &ar1, &sig, &ar2);
// условный оператор для учета переполнения типов
if ((ar1>=SHRT_MAX)||(ar1<=SHRT_MIN)|| (ar2>=SHRT_MAX)||(ar2<=SHRT_MIN))
{
printf("You have gone beyond a value of type int, please enter the arguments are not outside the range [−2,147,483,648 ; +2,147,483,647]; press enter to continie \n");
flushall();
getchar();
// system("cls"); очищает экран перед следующей итерацией цикла
system("cls");
continue;
}
// проверка на правильность ввода знака
if ((sig!='+')&&(sig!='-')&&(sig!='*')&&(sig!='/'))
{
printf("you entered an incorrect character please one of the following characters: +, - , *, /; press enter to continie \n");
flushall();
getchar();
system("cls");
continue;
}
else
{
// если знак введен правильно, то в игру вступает оператор switch case
switch(sig)
{
case '+':
a=ar1+ar2;
break;
case '-':
a=ar1-ar2;
break;
case '*':
a=ar1*ar2;
break;
case '/':
{
if (ar2==0)
{
printf("deviding by zero is not allowed in this world");
getchar();
continue;
}

a=ar1/ar2;
}
break;
}
}
// печатаем ответ
printf("=%d \n", a);
// в случае если пользователь уже все, при вводе q с клавиатуры цикл разрывается и программа завершает работу
printf("To continue, press enter , to exit press q \n");
flushall();
scanf("%c", &sig);
if(sig=='q') break;

flushall();
getchar();
system("cls");
}
return 0;
}
animator-kun вне форума Ответить с цитированием
Старый 09.02.2015, 11:44   #2
magnet
Пользователь
 
Регистрация: 02.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от animator-kun Посмотреть сообщение
Код:
// проверка на правильность ввода знака
if ((sig!='+')&&(sig!='-')&&(sig!='*')&&(sig!='/'))
Вместо этой проверки, добавь default case в switch.
magnet вне форума Ответить с цитированием
Старый 09.02.2015, 12:09   #3
magnet
Пользователь
 
Регистрация: 02.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от animator-kun Посмотреть сообщение
Код:
printf("To continue, press enter , to exit press q \n");
А что будет если пользователь нажмет любую другую клавишу? Может лучше заменить на : "Press 'q' to exit, or any other key to continue."?

Можно так (если важен Enter):
Код:
scanf("%c", &sig);
if(sig=='q') break;
if(sig=='\n') continue;
Но можно и ничего не добавлять.

Последний раз редактировалось magnet; 09.02.2015 в 12:14.
magnet вне форума Ответить с цитированием
Старый 09.02.2015, 12:21   #4
magnet
Пользователь
 
Регистрация: 02.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от animator-kun Посмотреть сообщение
добрый день, помогите советом.

для лабораторной работы требуется написать приложение - калькулятор, я использовал бесконечный цикл while для повторного использования калькулятора, однако хотелось бы улучшить один момент, после вывода на экран надписи "To continue, press enter , to exit press q" если нажимать enter, то приходится нажимать эту клавишу несколько раз для перехода на следующую итерацию, хотелось бы ввести проверну на нажатие клавиши enter, как это можно реализовать?
Вот решил подправить (извени что не для VS).

Код:
#include "limits.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
    int ar1, ar2, result;
    char sig, exitKey = 'a';
    
    // чтобы приложение не закрывалось сразу же после выполнения выражения, 
    // был введен бесконечный цикл while 
    // c условием выхода при нажатии клавиши q
    while(exitKey != 'q')
    {
        printf("Enter expression \n");

        scanf("%d%c%d", &ar1, &sig, &ar2);
        getchar();
        // условный оператор для учета переполнения типов
        if ((ar1>=SHRT_MAX)||(ar1<=SHRT_MIN)|| (ar2>=SHRT_MAX)||(ar2<=SHRT_MIN)) {
            printf("You have gone beyond a value of type int. "
                    "Please enter the arguments are not outside the range [−2,147,483,648 ; +2,147,483,647]; "
                    "Press enter to continue \n");
            getchar(); 
            continue;
        }

        switch(sig) {
            case '+':
                result=ar1+ar2;
                break;
            case '-':
                result=ar1-ar2;
                break;
            case '*':
                result=ar1*ar2;
                break;
            case '/':
                 if (ar2==0) {
                    printf("Dividing by zero is not allowed in this world");
                    getchar();
                    continue;
                }
                result=ar1/ar2;
                break;
            default:
                printf("You entered an incorrect character '%c' "
                        "Please use one of the following characters:"
                        " +, - , *, /; press enter to continie \n", sig);
                getchar();
                continue;
        }
        
        // печатаем ответ
        printf("=%d \n", result);
        
        // при вводе q с клавиатуры цикл разрывается и программа завершает работу
        printf("Press 'q' to exit, or any other key to continue.\n");
        scanf("%c", &exitKey);
    }
    printf("See you :)\n");
    return 0;
}
magnet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с дописанием программы для лабораторной работы. Annie Square Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.01.2016 20:39
Написать маленькое приложение для имитации работы в браузере cashmail Фриланс 1 06.11.2015 17:58
Требуется написать веб-приложение типа demo.vtiger.com для диплома musculatura Фриланс 5 14.05.2013 18:20
Требуется написать информационное приложение для iPhone и iPad ozon170 Фриланс 1 12.08.2011 23:08
Для облегчения работы с TFS - приложение для работы над дефектами и задачами Аякс Софт 1 18.03.2009 11:43