Форум программистов, компьютерный форум CyberForum.ru

Конец ввода - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Ruger
1 / 1 / 0
Регистрация: 25.10.2011
Сообщений: 15
02.11.2011, 16:07     Конец ввода #1
Всем привет =)
Делал очередное задание из учебника Страуструпа, но никак не могу заставить прогу работать)
Прога-первое приближение калькулятора, т.е. делает операции последовательно, не учитывая приоритетов.
Написано 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 - тот же результат. Что за ерунда?)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.11.2011, 17:42     Конец ввода #2

Не по теме:

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



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

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

Не по теме:

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



А ты после 1+2 ещё введи символ и потом цифру.
Спасибо, это помогло =) Хотя странный пример какой-то, но тем не менее пока сойдёт, сейчас важнее с лексемами и токенами разбираться. Спасибо!
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 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'. А ещё лучше символ '=' используй, для логичности происходящего.
Ruger
1 / 1 / 0
Регистрация: 25.10.2011
Сообщений: 15
02.11.2011, 19:09  [ТС]     Конец ввода #6
Спасибо большое! =)
Yandex
Объявления
02.11.2011, 19:09     Конец ввода
Ответ Создать тему
Опции темы

Текущее время: 15:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru