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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 15:17   #1
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
Восклицание atof

Вот функция которая должна считывать строку из файла и добавлять данные в структуры. Строка разбивается на char int double.
Вопрос конкретно про функцию atof, которая должна из 3ёх символов получить дробное число. Функция строку преобразовывает в дробное число, но почему-то отбрасывает дробную часть. Почему??
Код:
vector<NOTEBOOK> readOfFile()
{
	vector<NOTEBOOK> A;
	NOTEBOOK note;
	short int number;
	string kk;
	ifstream potok("note.txt");
	string a;
	while(!potok.eof())
	{
		getline(potok, a);
		for(int i = 0; i<21; i++)
		{
		note.model[i]=a[i];
		}
		for(int i = 21; i<25; i++)
		{
			kk+=a[i];	
		}
		note.price=atoi(kk.c_str());
		kk.clear();
		float ff;
		double ddd;
		for(int i = 26; i<29; i++)
		{
			kk+=a[i];	
		}
		note.weight=atof(kk.c_str()); //вот использование функции
	}
		potok.close();
	return A;
}
PinkPink вне форума Ответить с цитированием
Старый 19.02.2012, 16:47   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Я вас умоляю, называйте переменные по-человечески. А то ж ничего не читабельно в этом потоке кк и ддд... Во-первых, убедитесь, что note.weight у вас вещественного типа, а не целочисленного. Во-вторых, как именно хранится в файле ваще вещественное число? То есть какой разделитель между целой и дробной частями: точка или запятая?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 19.02.2012, 16:53   #3
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию

Цитата:
Сообщение от ACE Valery Посмотреть сообщение
Я вас умоляю, называйте переменные по-человечески. А то ж ничего не читабельно в этом потоке кк и ддд... Во-первых, убедитесь, что note.weight у вас вещественного типа, а не целочисленного. Во-вторых, как именно хранится в файле ваще вещественное число? То есть какой разделитель между целой и дробной частями: точка или запятая?
сори за переменные, просто код не пашет, вот и писала наобум названия.
разделитель точка, поставила запятую - запахало. но опять же проблема. переводит например число 2,6 в 2,599999999999
как нормально сделать??
PinkPink вне форума Ответить с цитированием
Старый 19.02.2012, 17:36   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

А вот это уже хороший вопрос.
У меня переводит отлично. Какой у вас компилятор?
Посмотрите, что у вас находится в строке а изначально, после getline(potok, a);
И что у вас находится в строке kk после цикла
Код:
for(int i = 26; i<29; i++)
		{
			kk+=a[i];	
		}
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Операция atof Blad47 Помощь студентам 5 17.10.2010 17:31