Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - помогите разобраться

Ответить
Настройки темы
C/C++ - помогите разобраться

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем доброго времени суток. Совсем недавно начал изучать С++ и вот решил попробовать написать первую программу. Пишу в Code::Blocks 10.05. Сопсно, код:
Код: Выделить весь код
#include <iostream>
using namespace std;
char keymap [256];

int main()
{
int a=0,b=0,c=0,choice;
    cout<<"The calculator"<<endl<<"version 1.0\n"<<endl;
do
    {
        cout<<"Enter number and press <enter> button: "<<endl;
        cin>>a;
        cout<<endl<<a<<endl;
        cout<<"\nChoose operation: "<<endl<<"+"<<endl<<"-"<<endl<<"*"<<endl<<"/"<<endl<<"="<<endl<<"For exit press 'q' (quit)"<<endl;
        cin>>choice;
        switch (choice)
            {
            case '+':
                cout<<a<<" + "<<endl<<endl;
                cout<<"Enter number and press <enter> button: "<<endl;
                cin>>b;
                с=a+b;
                cout<<endl<<a<<"+"<<b<<"="<<d<<endl;
                break;
            case '-':
                cout<<a<<" - "<<endl<<endl;
                cout<<"Enter number and press <enter> button: "<<endl;
                cin>>b;
                с=a-b;
                cout<<endl<<a<<"-"<<b<<"="<<d<<endl;
                break;
            case '*':
                cout<<a<<" * "<<endl<<endl;
                cout<<"Enter number and press <enter> button: "<<endl;
                cin>>b;
                с=a*b;
                cout<<endl<<a<<"*"<<b<<"="<<d<<endl;
                break;
            case '/':
                if (a!=0)
                    {
                    cout<<a<<" / "<<endl<<endl;
                    cout<<"Enter number and press <enter> button: "<<endl;
                    cin>>b;
                    с=a/b;
                    cout<<endl<<a<<"/"<<b<<"="<<d<<endl;
                    }
                else
                    {
                    cout<<"Zero can not be divided. Enter another number!!\n"<<endl;
                    }
                break;
            case '=':
                cout<<a<<" = "<<a<<endl<<endl;
                break;
            }
    }
    while ('q');
}
Суть в следующем: изначально вводится число1, далее предлагается определить действие (прибавление, вычитание и т.д.). После выбора действия предлагается ввести число2, которое к числу1 будет прибавляться, вычитаться и т.д. соответственно. Результат операции записывается в переменную "с" и программа начинает цикл сначала, пока не будет выбран вариант "Выход".
Но вот какая беда - я не знаю, как заставить С понимать нажатие клавиш. При выборе любой из операций (+,-,*,/,q) программа зацикливается в этом месте до бесконечности...
Код: Выделить весь код
        cout<<"Enter number and press <enter> button: "<<endl;
        cin>>a;
        cout<<endl<<a<<endl;
        cout<<"\nChoose operation: "<<endl<<"+"<<endl<<"-"<<endl<<"*"<<endl<<"/"<<endl<<"="<<endl<<"For exit press 'q' (quit)"<<endl;
        cin>>choice;
...пока электричество не закончится.

Подскажите пожалуйста, как мне решить эту простенькую задачку??

Отправлено: 19:40, 06-02-2012

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Объясни, что за
Цитата Harik:
while ('q'); »
?
while q что? Выход почему? Потому что гладиолус?
Вспоминай анекдот:
-Приборы!
-15!
-Что 15?!
-Какие приборы?!!!

Выход.
Q!
Что Q? Какое Q? Куда это Q?

Поэтому надо сделать что? Правильно, поставить условие! Q у нас не просто так, а кто-то или что то должно быть ему равно или не равно. Правильно? Или не правильно?
Поэтому while <логическое условие> ! А q - это не логическое условие, это с боку бантик.

Вот. На ошибку я тебе указал. Дело за малым. Исправишь ее и ты молодец!

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:36, 06-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


пока не совсем понимаю...
вариант
Код: Выделить весь код
while (choice!=q);
не катит. Понятно, что делаю что-то не правильно, но что...

Отправлено: 00:27, 07-02-2012 | #3


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Harik,
Цитата Harik:
while (choice!=q); »
Перепиши условие еще раз. Что ты, сходу не получилось и опять сюда прибежал. Давай назад, в борозду!
(а вот тут серьезно)
Q - это что? Это буква, цифра, длинное слово, логическая переменная?
choice - то же самое. Что это?
Что и с чем ты пытаешься сравнить?
(а тут уже не очень) Уж не крокодилов ли с ежиками?
Цитата Harik:
Понятно, что делаю что-то не правильно, но что... »
Думай, думай! Шевели мозгами! (с)

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:45, 07-02-2012 | #4


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


С той штукой разобрался. Спасибо большое за подсказки
Но теперь не могу разобраться с локализацией. Спрашивал у гугла по этому поводу, говорит - дело в консоли (её кодировка). То есть теоретически если в консоли указать нужную кодировку, то всё будет корректно отображаться. А как сделать, чтобы всё правильно отображалось на этапе написания кода. В смысле, не в самом коде, а в результате компиляции, чтобы не приходилось лишний раз лезть в консоль и указывать кодовую страницу..?

Вот, что у меня получилось, просьба не смеяться))

Код: Выделить весь код
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

int main()
{
int choice;
setlocale(LC_ALL,"Russian");
double a=0,b=0;
char op,q;
double res;
cout<<"Калькулятор"<<endl<<"версия 1.1\n"<<endl<<endl;
repeat: cout<<"Будем считать?"<<endl<<endl<<"1. Да\n2. Нет"<<endl;
cin>>choice;
if (choice==1)
    {
        do
        {
        cout<<"Введите Ваше число и нажмите кнопку <enter>: "<<endl;
        cin>>a;
        cout<<endl<<a<<endl;
        cout<<"\nChoose operation: "<<endl<<"+"<<endl<<"-"<<endl<<"*"<<endl<<"/"<<endl<<"="<<endl<<"For exit press 'q' (quit)"<<endl;
        cin>>op;
        switch (op)
            {
            case '+' :
                cout<<a<<" + "<<endl<<endl;
                cout<<"Введите Ваше число и нажмите кнопку <enter>: "<<endl;
                cin>>b;
                res=a+b;
                cout<<endl<<a<<"+"<<b<<"="<<res<<endl<<endl;
                break;
            case '-' :
                cout<<a<<" - "<<endl<<endl;
                cout<<"Введите Ваше число и нажмите кнопку <enter>: "<<endl;
                cin>>b;
                res=a-b;
                cout<<endl<<a<<"-"<<b<<"="<<res<<endl<<endl;
                break;
            case '*' :
                cout<<a<<" * "<<endl<<endl;
                cout<<"Введите Ваше число и нажмите кнопку <enter>: "<<endl;
                cin>>b;
                res=a*b;
                cout<<endl<<a<<"*"<<b<<"="<<res<<endl<<endl;
                break;
            case '/' :
                if (a!=0)
                {
                    cout<<a<<" / "<<endl<<endl;
                    cout<<"Введите Ваше число и нажмите кнопку <enter>: "<<endl;
                    cin>>b;
                }
                else if (b!=0)
                    {
                        res=a/b;
                        cout<<endl<<a<<"/"<<b<<"="<<res<<endl<<endl;
                    }
                else (a=0,b=0);
                    {
                        cout<<"Нельзя делить на ноль. Введите другое число!!\n"<<endl;
                    }
                break;
/*            case 'q' :
                return 0;
                break;
*/
            default:
                cout<<"Неверный оператор '"<<op<<"'"<<endl<<endl;
                cout<<"Попробуйте ещё раз!\n\nВведите число: ";
                break;
            }
        }
    while (op==q);
    }
else if (choice!=1,choice!=2)
    {
    cout<<"Ошибка. Повторите ввод!"<<endl;
    goto repeat;
    }
else (choice==2);
    {
    cout<<"До свидания!"<<endl;
    return 0;
    }
}
Подскажите, куда копать, или что конкретно нужно сделать? Как и прежде, среда разработки - Code::Blocks

Отправлено: 20:07, 07-02-2012 | #5


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Harik:
Спрашивал у гугла по этому поводу, говорит - дело в консоли (её кодировка). То есть теоретически если в консоли указать нужную кодировку, то всё будет корректно отображаться. А как сделать, чтобы всё правильно отображалось на этапе написания кода. В смысле, не в самом коде, а в результате компиляции, чтобы не приходилось лишний раз лезть в консоль и указывать кодовую страницу..? »
Кирилица в консоли -> я это делаю так

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:39, 07-02-2012 | #6


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


могу поделиться своим опытом)) по поводу кирилицы вот =

ПИСАТЬ В INT MAIN()
{
setlocale( LC_ALL, "Russian" );
}

Отправлено: 22:25, 07-02-2012 | #7


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


virus8, это по моему для Visual Studio работает, но в билдере у меня не проходит такой вариант. И, уже было.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 23:56, 07-02-2012 | #8


ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата Harik:
while ('q'); »
Команда while выполняет цикл до тех пор, покуда условие является "истинным". "Истинным" является любое целочисленное значение, отличное от нуля.
Значение константы 'q' является целочисленным и равно коду указанного символа. Следовательно условие всегда будет истинным, и цикл будет выполняться бесконечно

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 04:26, 14-02-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - помогите разобраться

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите разобраться Felixcat Видеокарты 1 27-09-2009 13:15
Помогите разобраться pogo Microsoft Windows NT/2000/2003 2 06-07-2009 13:00
CMD/BAT - Помогите разобраться... LooTer Скриптовые языки администрирования Windows 1 21-07-2008 06:48
Помогите разобраться Degrimort Видеокарты 12 26-12-2007 17:46
Помогите разобраться Larich Хочу все знать 1 08-06-2007 08:25




 
Переход