ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

25.09.2009, 20:10
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
гм, кабэ в последней студии все нормально и это отвечает стандарту. Kreoda чтото ты темнишь =\ код и версию студии сюда кидай.
Последний раз редактировалось Hiro Protagonist; 25.09.2009 в 20:26..
|
|
|

25.09.2009, 21:38
|
|
Участник форума
Регистрация: 11.09.2008
Сообщений: 107
Провел на форуме: 262809
Репутация:
21
|
|
Помогите написать функцию чтения из файла чисел типа double и поместить их в переменные.
Ниже привожу код, при компиляции выдает херню какую - то прочитанные числа не совпадают с
тем что написанно в оригинале.
текстовый файл вида
10.2 12.5 17.6 15.2
14.3 52.1 10.7 11.7
и т.д.
тип переменной elem
Код:
#define razmer 4
struct points
{
double aPoints[razmer];
};
Эта функция читает файл построчно, переменная kolvo следит за тем чтобы строк не было больше
чем массив.
Код:
int cCluster::load_file(char* name){
cout<<"Test function \n";
char line[100],*stroka;
FILE *fp;
fp=fopen(name,"r");
int i=0;
while(!feof(fp)){
if(i>kolvo)
break;
stroka=fgets(line,100,fp);
printf("Here is read %d line \n here znacheniy \n %s",i,stroka);
elem[i]=str2points(stroka);
i++;
}
fclose(fp);
return 0;
}
Функция str2points(char* line) разбивает строку на числа с помощью ф-ции strtok получает
числа и приводит их к типу double.
Код:
points cCluster::str2points(char* line){
char *str;
int i=0;
points temp;
str=strtok(line," ");
printf("here is strtok %s\n",str);
while(str!=NULL){
if(i>razmer)
break;
temp.aPoints[i]=(double)*str;
str=strtok(NULL," ");
printf("here is strtok %s\n",str);
printf("here is point %d\n",temp.aPoints[i]);
}
return temp;
}
|
|
|

25.09.2009, 21:54
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
а структуру то зачем заводишь? можно просто массив переменных объявить, а то бред получается - излишнее усложнение. или планируется делать класс и добавлять методы?
|
|
|

25.09.2009, 21:55
|
|
Участник форума
Регистрация: 11.09.2008
Сообщений: 107
Провел на форуме: 262809
Репутация:
21
|
|
2Ra$cal
Да я написал класс, просто весь выкладывать смысла нет, а вот в этом моменте у меня проблемы.
|
|
|

25.09.2009, 22:00
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
temp.aPoints[i]=(double)*str; - негодится
_gcvt() используй
|
|
|

25.09.2009, 22:07
|
|
Участник форума
Регистрация: 11.09.2008
Сообщений: 107
Провел на форуме: 262809
Репутация:
21
|
|
Сообщение от Ra$cal
temp.aPoints[i]=(double)*str; - негодится
_gcvt() используй
Так мне же наоброт нужно из строки в double, gcvt() делает обратный преобразования из double в строку.
Если я не туда посмотрел, то дай ссылочку на ресурс где ф-ция разобранна.
|
|
|

25.09.2009, 22:14
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
подскажу хитрый финт, как пользоваться документацией. вбиваешь "gcvt msdn" в гугле. открываешь страницу. смотришь вниз. видишь
See Also
Reference
Data Conversion
Floating-Point Support
atof, _atof_l, _wtof, _wtof_l
_ecvt
_fcvt
методом напряжения извилин понимаешь что нижние функции похожи на эту, но есть atof/wtof что говорит об ascii/wide, т.е. о строках, и f - float. итого получается что мы нашли нужную функцию просто проанализировав док известной нам функции. собсно это и есть основной способ добычи информации.
|
|
|

25.09.2009, 22:34
|
|
Участник форума
Регистрация: 11.09.2008
Сообщений: 107
Провел на форуме: 262809
Репутация:
21
|
|
2Ra$cal
Мог бы просто посоветовать ссылку msdn (буду теперь впервую очередь там смотреть) а не указывать ф-цию которая подходит для других случаев и намекать на то что я лентяй.
В итоге код всеравно не работает, теперь показывает что все 0 помимо ф-ции atof пробовал strtod.
|
|
|

25.09.2009, 22:38
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
да я не наводил на лень. просто спешу и не вникал в вопрос. поэтому и дал описание не той функции. ну и раз уж так получилось решил рассказать как пользоваться доками =)
В итоге код всеравно не работает, теперь показывает что все 0
проверь, нету ли пробелов, и разделитель целой и дробной части. возможно нужно локаль грузить русскую, или реплейсить точки на запятые или наоборот.
|
|
|

25.09.2009, 22:47
|
|
Участник форума
Регистрация: 11.09.2008
Сообщений: 107
Провел на форуме: 262809
Репутация:
21
|
|
2Ra$cal
Пробелов лишних вроде нет( только те что разделяют числа, единственное что может strtok нет работать я вот эту строчку совсем не понимаю str=strtok(NULL," ")  С разделителями поэксперементировал тот же хрен только в левой руке. Вообщем тривиальная задча а сижу над ней часа 4 точно.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|