2 / 2 / 0
Регистрация: 25.10.2011
Сообщений: 15
1

Конец ввода

02.11.2011, 16:07. Показов 3780. Ответов 5
Метки нет (Все метки)

Всем привет =)
Делал очередное задание из учебника Страуструпа, но никак не могу заставить прогу работать)
Прога-первое приближение калькулятора, т.е. делает операции последовательно, не учитывая приоритетов.
Написано 1+2+3 - сложит 1 и 2, затем к результату прибавит 3. Написано 1+2*3 - сначала сложит 1 и 2, потом результат умножит на 3)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//
// This is example code from Chapter 6.3.1 "First attempt" of
// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup
//
 
#include "std_lib_facilities.h"
 
//------------------------------------------------------------------------------
 
int main()
try
{
    cout << "Please enter expression (we can handle +, -, *, and /): ";
    int lval = 0;
    int rval;
    char op;
    cin>>lval;               // read leftmost operand
    if (!cin) error("no first operand");
    while (cin>>op) {        // read operator and right-hand operand repeatedly
        cin>>rval;
        if (!cin) error("no second operand");
        switch(op) {
        case '+':
            lval += rval;    // add: lval = lval + rval
            break;
        case '-':
            lval -= rval;    // subtract: lval = lval - rval
            break;
        case '*':
            lval *= rval;    // multiply: lval = lval * rval
            break;
        case '/':
            lval /= rval;    // divide: lval = lval / rval
            break;
        default:             // not another operator: print result
            cout << "Result: " << lval << '\n';
            keep_window_open();
            return 0;
        }
    }
    error("bad expression");
}
catch (exception& e) {
    cerr << "error: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    cerr << "Oops: unknown exception!\n"; 
    return 2;
}
 
//------------------------------------------------------------------------------
Ввожу 1+2, затем | - ничего не происходит. Ввожу 1+2, потом Ctrl+Z - тот же результат. Что за ерунда?)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2011, 16:07
Ответы с готовыми решениями:

Стандартный поток ввода, конец файла
Что считается концом файла на стандартном потоке ввода. То есть, по сути, на scanf?

Ввести определенный символ, обозначающий конец ввода
В общем мне нужно после нажатия на определённый символ допустим это &quot;h&quot; срабатывало действия, и что...

Считывать данные пока не встретится символ '|' обозначающий конец ввода
Нужно считать данные пока не встретится символ '|' обозначающий конец ввода. double val;...

Введя числа с клавиатуры без ограничения их количества (конец ввода - число ноль), найти сумму положительных и произведение отрицательных чисел
Помогите решить, пожалуйста. Введя числа с клавиатуры без ограничения их количества (конец ввода...

5
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.11.2011, 17:42 2

Не по теме:

Ввод - мальчик, у него есть конец.
Ввода - девочка, у неё нет конца, потому что она не мальчик.



А ты после 1+2 ещё введи символ и потом цифру.
1
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
02.11.2011, 17:51 3
Вводи так: 1[Enter]+[Enter]2[Enter]
Либо через пробел (но там возможно оператор съест пробел... Если так будет происходит, то перед cin >> op можно добавить ещё один cin >> op)
0
2 / 2 / 0
Регистрация: 25.10.2011
Сообщений: 15
02.11.2011, 18:36  [ТС] 4
Цитата Сообщение от TwiX Посмотреть сообщение
Вводи так: 1[Enter]+[Enter]2[Enter]
Я так и делаю, там же цикл while и после последнего [Enter] он ждёт следующий оператор и цифру, и так до бесконечности

Добавлено через 54 секунды
Цитата Сообщение от Deviaphan Посмотреть сообщение

Не по теме:

Ввод - мальчик, у него есть конец.
Ввода - девочка, у неё нет конца, потому что она не мальчик.



А ты после 1+2 ещё введи символ и потом цифру.
Спасибо, это помогло =) Хотя странный пример какой-то, но тем не менее пока сойдёт, сейчас важнее с лексемами и токенами разбираться. Спасибо!
0
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.11.2011, 18:56 5
C++
1
2
3
 while (cin>>op) { 
 if(op == 'q' )
          break;
И после ввода 1+2 вводи букву 'q'. А ещё лучше символ '=' используй, для логичности происходящего.
1
2 / 2 / 0
Регистрация: 25.10.2011
Сообщений: 15
02.11.2011, 19:09  [ТС] 6
Спасибо большое! =)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2011, 19:09
Помогаю со студенческими работами здесь

Массив строк. Конец строки и конец массива
\n - перевод на новую строку \0 - конец строки Если у меня массив строк (текст), чем...

После ввода специальности программа пропускает все остальные этапы ввода информации
Написал программу которая выводит учеников с меньше 60ти баллами, но после ввода специальности она...

Прерывание ввода при израсходовании попыток ввода пароля
Этот цикл (приведенный ниже) проверяет пароль пользователя - это слово &quot;пароль&quot;.Для ввода пароля...

Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? ( что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru