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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 15:24   #1
DeizR
Новичок
Джуниор
 
Регистрация: 03.08.2009
Сообщений: 2
Сообщение Несоответствие работы cin.putback в разных компилляторах

Здравствуйте!
Озадачило меня следующее несоответствие:
Код:
#include <iostream>
#include <cstring>
using namespace std;

int main ()
{
	while (cin) {
		char ch;
		do {
			cin.get (ch);
			if (ch=='_') {
				cin.putback('6');
				cin.putback('5');
				cin.putback('4');
				cin.putback('3');
				cin.putback('2');
				cin.putback('1');
			}
		} while (ch != '\n' && isspace (ch));
		cout << ch;
	}
}
Приведенный код, скомпилированный в g++, дает следующий результат:

Код:
debianpc:/# c++ test.cpp 
debianpc:/# ./a.out
abc_abc
abc_123456abc
(что и требуется)

скомпилированный в Builder C++ 2007:

Код:
c:\test.exe
abc_abc
abc_1456abc
а в Dev-C++ вообще вылетает после ввода строки...

в чем кроется загвоздка?

Последний раз редактировалось DeizR; 03.08.2009 в 15:55.
DeizR вне форума Ответить с цитированием
Старый 03.08.2009, 16:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Оффтоп: Признаться я так и не понял что метод putback делает...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2009, 16:57   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Оффтоп: Признаться я так и не понял что метод putback делает...
Возвращает символ в поток. DeizR напишите условие вашей задачи, если честно, не сильно понятно, что вы хотите.
profi вне форума Ответить с цитированием
Старый 03.08.2009, 17:31   #4
DeizR
Новичок
Джуниор
 
Регистрация: 03.08.2009
Сообщений: 2
По умолчанию

Этот кусок написан в качестве примера. Вообще это одно из упражнений Страуструпа, в котором предлагается добавить в калькулятор (простейший интерпритатор) поддержку функций. В линуксе он успешно работает, а вот под виндой не захотел...

Поддержка функций реализована следующим образом:

у нас имеется строка, подлежащая разбору, например:

Код:
f(#x,y)=x*y+1;a=5;b=6;f(a,b);
где f(#x,y)=x*y+1; - объявление функции, a=5;b=6 - объявления переменных, f(a,b) - вызов функции.

Синтаксический анализатор последовательно идет по строке, считывая лексемы, когда он доходит до вызова функции, он добавляет в строку выражение соответствующее имени вызываемой функции, т.е. :


Код:
f(#x,y)=x*y+1;a=5;b=6;f(a,b)[farg1*farg2+1];
значения аргументов farg1 и farg2 заносяться в общую таблицу при проходе через f(a,b). Соответственно дальше парсер продолжает двигаться по выражению [farg1*farg2+1], вычисляя его и возвращая значение.

Для добавления выражения в квадратных скобках применяется следующая функция:

Код:
int fn_call (string fn_name, string s)
{
	int point = 1;
	string::iterator i = s.end();
	for (;;) {
		switch (curr_tok) { 
		case NAME:
		case NUMBER:
			table[fn_name+"arg"+i2s(point)]=expr(false); // считывание значений аргументов 
			break;
		case COMMA:
			point++;
			get_token(); // считывается следующая лексема
			break;
		case RP:
			cin.putback(char(RQP)); // правая квадратная скобка
			while (i != s.begin()) cin.putback(*--i); // добавление выражения
			cin.putback(char(LQP)); 
			return point;
		default:
			error("unexpected end or wrong symbol in parameters");
			return 0;
		}
	}
}
Не знаю, понятно ли объяснил
DeizR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько разных строк из разных файлов сформировать в один Иван123456 Microsoft Office Excel 3 30.07.2009 17:05
несоответствие масштаба сетки и графика (C++Builder) nici Помощь студентам 1 08.07.2009 09:50
Несоответствие типов nusik Общие вопросы Delphi 14 31.05.2009 17:24
cin??? Paul_AG Общие вопросы C/C++ 4 24.04.2009 14:02
Класс cin Freer Общие вопросы C/C++ 10 25.12.2008 23:46