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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2012, 17:11   #1
Boshop
 
Регистрация: 19.03.2012
Сообщений: 6
Вопрос C++ Калькулятор

Начал практиковаться в C++ помогите понять почему не работает мой калькулятор?
Вроде все правильно,ввожу числа а он просто отключается. Знаю что много переменных и все не в классах,но мне бы хотелось чтобы он для начала работал.В чем может быть проблемма?
Код:
#include <iostream>
using namespace std;
int main()
{
	char s[100];
	cout << "Vvedite primer: \n";
	cin >> s;
	int per,two,obch;
	char h[20];
	char k[20];
	char j;
	char o;
	int f=0;
	int l=0;
	bool ten=false;
	bool six=false;
	bool joke=false;
	bool one=false;
	bool i =false;
	if(i==false)
	for(int i=0;i<=100;i++)
	{
		if(ten==false)
		{
		if(isdigit(s[i]))
		{
			h[f]=s[i];
			f+=1;
		}
		else
		{
			j=s[i];
			ten=true;
			six=true;
		}
		}
		if(six==true)
		{
			if(isdigit(s[i]))
			{
				k[l]=s[i];
				l+=1;
			}
			else 
			{
				o=s[i];
				six=false;
				joke=true;
			}
		}
		if(joke==true)
		{
			if(one=false)
			{
			per=atoi(h);
			}
			two=atoi(k);
			switch(j)
			{
			case '+': if(one ==false) obch=per+two;else obch+=two;break;
			case '-': if(one ==false) obch=per-two;else obch-=two;
			case '*': if(one ==false) obch=per*two;else obch*=two;
			case '/': if(one ==false) obch=per/two;else obch/=two;
			case '=': cout << obch;i=true;break;
			}
			one=true;
		}
		cout << obch;
	}
	cin.get();
           system("pause");
           return 0;
}
Писать что это быдло-код ненадо сам знаю. Просто скажите в чем проблеммы моего кода. Знаю критики будет очень много и я к ней готов.
http://dump.ru/file/5861282

Последний раз редактировалось Boshop; 25.09.2012 в 19:28.
Boshop вне форума Ответить с цитированием
Старый 25.09.2012, 17:54   #2
Boshop
 
Регистрация: 19.03.2012
Сообщений: 6
По умолчанию

Если непонятно для чего нужны какие-то переменные,объясню
Boshop вне форума Ответить с цитированием
Старый 25.09.2012, 19:25   #3
Boshop
 
Регистрация: 19.03.2012
Сообщений: 6
По умолчанию

Кто-нибудь поможет?
Boshop вне форума Ответить с цитированием
Старый 26.09.2012, 01:48   #4
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

1) Как ты вводишь массив чаров s? (Если используешь поток cin тогда символы не должны содержать пробелов)
2) "if (i == false)" - Не нужно этой глупой проверки
3) Что такое 100? Размер введенной строки можно узнать с помощью функции strlen, в твоем случаем strlen(s) + 1; Почему +1, потому что каждая строка заканчивается терминальным символом \0.
coNsept вне форума Ответить с цитированием
Старый 26.09.2012, 01:50   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Как-то так.

Код:
#include <iostream>
#include <string>

int CalcExpression(std::string src, char math_expr)
{
 bool flag = true;

 int result = -1;

 std::string::iterator it;

 std::string first_src, last_src;

 for (it = src.begin(); it != src.end(); it++)
 {
  if (*it == math_expr)
   flag = false;

  if (flag)
   first_src += *it;

  if (!flag)
   last_src += *(it + 1); 			
 }
 return result = atoi(first_src.c_str()) + atoi(last_src.c_str());
}

bool FindExpression(std::string& src, int& result)
{
 if (src.empty()) return false;

 if (src.find('+'))
 {	
  result = CalcExpression(src, '+');
 }
 else if (src.find('-'))
 {
  result = CalcExpression(src, '-');
 }
 else if (src.find('*'))
 {
  result = CalcExpression(src, '*');
 }
 else if (src.find('/'))
 {
  result = CalcExpression(src, '/');
 }
 else
 {
  return false;
 }
 return true;
}

int main()
{
 int result;
 std::string str;
 std::cout << "Введите выражение без пробелов, пример: 132+475: ";
 std::cin >> str;
 
 if (!FindExpression(str, result)) std::cout << "\nСтрока пуста или символ математического выражения не найден\n";
  std::cout << "Результат: " << result << "\n";

 std::cout << std::endl; 
 system("pause"); return 0;
}
coNsept вне форума Ответить с цитированием
Старый 26.09.2012, 08:14   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

if(one=false)
if(one==false)...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор exelim Win Api 4 11.02.2012 23:05
калькулятор :-( Свежий Паскаль, Turbo Pascal, PascalABC.NET 1 11.05.2011 21:27
Калькулятор Arcueid1691 Общие вопросы C/C++ 2 15.09.2010 18:39
калькулятор sergeyvl JavaScript, Ajax 10 22.08.2010 12:22
Калькулятор Sekt Фриланс 4 22.10.2009 10:34