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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2023, 20:43   #1
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 59
По умолчанию функция не меняет переменную

Функция:

Код:
double strise(CString sem, int lon, bool fol)
{
//char po;
//string sem;
//double nu;
int  to;
to = 0;
int sta = 0;
int sg = 1;
if (sem[0] == '-')
{
	sg = -1; sta = 1;
}
if (sem[0] == '+')
sta = 1;
double cel = 0;
//int lon = sem.length() - 1;
lon = lon - 1;
for (int jy = sta; jy < lon; jy++)
{
	if ((sem[jy] == '.') || (sem[jy] == ','))
	{
		to = jy; break;
	}
}
if (to == 0)
for (int a = sta; a <= lon; a += 1)
{
	if ((int(sem[a]) < '0') || (int(sem[a]) > '5'))
		fol = 1;
	cel = cel * 6;
	cel = cel + int(sem[a]) - int('0');
	//cel = cel + int(sem.c_str()[a]) - int('0');
	//cout << cel;
	//po = sem.c_str()[a];
	//cout <<"\nchar=" << sem.c_str()[a];
	//cout <<" int="<< int(po);
}
else
{
	lon += 1;
	double cha = 0;
	for (int p = sta; p < to; p += 1)
	{
		if ((int(sem[p]) < '0') || (int(sem[p]) > '5'))
			fol = 1;
		cel = cel * 6;
		cel = cel + int(sem[p]) - int('0');
		//cel = cel + int(sem.c_str()[p]) - int('0');
		//cout << cel<<"\t";
	}
	for (int a = lon - 1; a > to; a--)
	{
		if ((int(sem[a]) < '0') || (int(sem[a]) > '5'))
			fol = 1;
		cha = cha + int(sem[a]) - int('0');
		//cha = cha + int(sem.c_str()[a]) - int('0');
		cha = cha / 6;
	}
	cel = cel + cha;
}
cel = cel * sg;
//int(sem.c_str());
return(cel);
}
должна приравнивать fol=1(true), когда символ неправильный.
На отладке fol принимает значение, но переменная oshi в строках
Код:
        a = strise(acs, asiz, oshi); b = strise(bcs, bsiz, oshi);
        c = strise(ccs, csiz, oshi); k = strise(kcs, ksiz, oshi);
	n = strise(ncs, nsiz, oshi); m = strise(mcs, msiz, oshi);
остаётся равна 0.
Что может быть не так?
максхи вне форума Ответить с цитированием
Старый 21.08.2023, 20:49   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Чтобы вернуть результат через параметр, его нужно передать по ссылке (доступно только в C++) или по указателю (доступно в C и C++). Попробуйте:
Код:
double strise(CString sem, int lon, bool& fol)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 21.08.2023 в 20:56.
BDA на форуме Ответить с цитированием
Старый 21.08.2023, 21:04   #3
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 59
По умолчанию

BDA, спасибо, буду знать.
максхи вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять, почему не видит переменную функция Dovlet JavaScript, Ajax 11 21.08.2016 00:09
Не меняет строки.... Otar4ik Помощь студентам 5 06.09.2015 16:34
Описать процедуру Minmax(X, Y), записывает в переменную X минимальное из значений X и Y, а в переменную Y - максимальное kinash96 Помощь студентам 3 12.10.2013 19:49
Кто меняет WMR на РБК? klapan Свободное общение 1 22.02.2012 17:27
Функция не меняет значение переменной.... DoHJICyaH Общие вопросы C/C++ 1 02.11.2008 20:10