Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   помогите разобраться (http://forum.oszone.net/showthread.php?t=227206)

Harik 06-02-2012 19:40 1853043

помогите разобраться
 
Всем доброго времени суток. Совсем недавно начал изучать С++ и вот решил попробовать написать первую программу. Пишу в 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;

...пока электричество не закончится.

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

lxa85 06-02-2012 21:36 1853115

Объясни, что за
Цитата:

Цитата Harik
while ('q'); »

?
while q что? Выход почему? Потому что гладиолус? :)
Вспоминай анекдот:
-Приборы!
-15!
-Что 15?!
-Какие приборы?!!!

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

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

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

Harik 07-02-2012 00:27 1853256

пока не совсем понимаю... :(
вариант
Код:

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

lxa85 07-02-2012 00:45 1853264

Harik,
Цитата:

Цитата Harik
while (choice!=q); »

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

Цитата Harik
Понятно, что делаю что-то не правильно, но что... »

Думай, думай! Шевели мозгами! :) (с)

Harik 07-02-2012 20:07 1853776

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

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

Код:

#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

Drongo 07-02-2012 21:39 1853835

Цитата:

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

Кирилица в консоли -> я это делаю так

virus8 07-02-2012 22:25 1853864

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

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

Drongo 07-02-2012 23:56 1853906

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

El Scorpio 14-02-2012 04:26 1858222

Цитата:

Цитата Harik
while ('q'); »

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


Время: 19:16.

Время: 19:16.
© OSzone.net 2001-