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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 17:03   #1
c++ learner
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 38
Вопрос sscanf (char to float) - неработает

Код:
	struct tag_pos
	{
		union 
		{
			float x, y, z;
			float v[3];
		};
	} pos = {0};

sscanf("%f %f %f", "1.0 1.0 2.0", &pos.x, &pos.y, &pos.z);
и не работает(
в векторе все так же нули после выполнения(
в чем может быть проблема?
"...в самом начале было слово.." т.е. 16-битное битовое поле.
c++ learner вне форума Ответить с цитированием
Старый 12.12.2010, 17:10   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
sscanf("1.0 1.0 2.0", "%f %f %f", &pos.x, &pos.y, &pos.z);
Проблема в том, что все наоборот.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 12.12.2010, 17:17   #3
c++ learner
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 38
По умолчанию

Cпасибо Syuf, я тоже чуть погодя обратился к описанию ф-ии и заметил нарушение...
но теперь она мне в данном коде:
Код:
sscanf("1.0 1.0 2.0", "%f %f %f", &pos.x, &pos.y, &pos.z);
сует во все x,y,z одно и тоже значение - "2.0"
"...в самом начале было слово.." т.е. 16-битное битовое поле.
c++ learner вне форума Ответить с цитированием
Старый 12.12.2010, 17:29   #4
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Код:
union 
{
    float x, y, z;
    float v[3];
[...]
sscanf("1.0 1.0 2.0", "%f %f %f", &pos.x, &pos.y, &pos.z);
Это же union, а не структура. Следовательно, x, y, z, и, наверняка, v[0], будут разными именами для одной и той же области памяти.

Последний раз редактировалось Indian; 12.12.2010 в 17:34.
Indian вне форума Ответить с цитированием
Старый 12.12.2010, 17:32   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А это уже проблема в понимании объединений: у вас запись float x, y, z означает не определение трех переменных тремя участками памяти, что обозначает float v[3], а определение трех переменных одним участком памяти, т.е.
Код:
union 
{
	float x, y, z;
	float v[3];
};
и
Код:
union 
{
	float x;
	float y;
	float z;
	float v[3];
};
эквивалентны.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 12.12.2010, 17:41   #6
c++ learner
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 38
По умолчанию

Indian, и правда)
А я почему-то по своей доброте душевной решил для себя что память будет делиться только между float x, y, z и float v[3]));

теперь сделал так...
Код:
	struct tag_pos 
	{
		union 
		{	
			struct 
			{
				float x, y, z;
			};
			float v[3];
		};
	} pos = {0};

sscanf("1.0 1.0 2.0", "%f %f %f", &pos.x, &pos.y, &pos.z);
Все работает как надо, спасибо!
"...в самом начале было слово.." т.е. 16-битное битовое поле.
c++ learner вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sscanf Lag Общие вопросы C/C++ 2 10.05.2010 14:47
Перевод char во float в С. vitalyisaev2 Помощь студентам 1 07.05.2010 19:13
FLOAT TO TRING И STRING TO FLOAT!! MelKiY_bad C++ Builder 6 07.05.2010 14:31
Cтроки. Приведение типов. char * to float Aerial Общие вопросы C/C++ 3 28.04.2010 14:54
sscanf DmT Общие вопросы C/C++ 4 12.06.2008 18:15