Покажи Публикации - akif
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: 1 [2]
16  Програмиране / Общ форум / C API за MYSQL -: Mar 02, 2005, 20:22
Цитат (mironcho @ Март 02 2005,11:31)
Цитат (Guest @ Март 02 2005,00:33)
Или използвай този код да замениш запетаите с точки:
Примерен код

char str[] = "32,33";
int i = 0;
for(i; i < strlen(str); i++)
{
if(str[i] == ',') str[i] = '.';
}
// str вече е 32.33


Поздрави,
gamehack

Или използвай strchr():

Примерен код

char *p;
if ((p = strchr(str, ',')) != NULL) {
        *p = '.';
}


Ако очакваш повече от една запетайки, примера на gamehack е по удачен, или ще трябва да си направиш цикъл с strchr().
За подробно описание - man 3 strchr.

Благодаря за отзивите.
Този код със промяна на "," със "." ми е ясен,
но моя проблем беше друг.
Потребителя въвежда низ във entry, след което
този низ се поставя във заявката към сървъра чрез
spirintf("insert into my_table %f", atof(niz));
Фактичесики проблема не е в низа, а във това че след
като atof(...); преобразува низа във double се получава стойност
(например 22,32 ОТБЕЛЯЗВАМ ЧЕ 22,32 е число, а не НИЗ) при която разделителя на цялата част от десетичната е ЗАПЕТАЯ което е проблем за заявката,
защото ЗАПЕТАЯТА се явява разделител м/у отделните стойности които се пращат към сървъра. '<img'>  
Мисля че проблема ще се реши със locale();
Прегледах man 7 locale, но честно казано не можах да разбера как да променя разделителя м/у цялата и десетичната част.
Ако ми изпратите някакъв кокретен код за промяна
на този разделител ще ме трогнете '<img'> .
17  Програмиране / Общ форум / C API за MYSQL -: Mar 01, 2005, 21:23
Цитат (ivak @ Март 01 2005,01:38)
нормално printf ползва точка за разделяне на цялата от дробната част, обаче в твоя случай явно въпросният символ е предефиниран. нямам unix подръка, за да проверя, но по стари спомени някъде в locale.h имаше char *decimal_point. май беше в някаква структура.

ако не можеш да го намериш или пък не искаш да го променяш, можеш да направиш sprintf в междинен буфер и после да замениш запетаята с точка, като ползваш strchr.

и един последен съвет: мъдрите хора ползват int за цената, представена в стотинки, защото иначе рискуват да получат зверски грешки от закръгляне.

Благодарности за съвета да използвам цената в стотинки и int стойност за цената.
В този случай отпада проблема със double.
Но все пак трябва да го реша проблема, за да си изясня
нещата за в бъдещи потребности.
Ако имаш някакви конкретни идеи за СУРБД за Скалд ще
съм ти задължен.
Защото за първи път пиша софтуер със Бази от Данни.
Благодарности  '<img'> !
18  Програмиране / Общ форум / C API за MYSQL -: Feb 28, 2005, 00:00
Здравейте приятели!
Пиша "Склад" на MYSQL като  използвам "С" за писане на клиента.
Заявката с която имам проблем има следния вид:
sprintf(query, "isert ito my_table values(%d, %d, %d, %f, %f)",
                cl_id, st_id, doc_id,  cena, colicestvo);
printf("%s\n", query);
Низа който се получава има следния вид:
 insert into my_table values(1, 2, 3,  20,33,  11,4)
Проблема е във последните 2 стойности които са от
тип  double.
MYSQL  иска стойностит да имат вида 22.(точка)33, а
в моя случай аз плучавам от потребителя тази променлива във вид на низ и като я преобразувам чрез  cena = atof(my_cena); , променливата cena=22,(запетая)33.
Всъщност трябва да заменя символа ',' във '.' във заявката, но
 във случая това не низ, а променлива от тип double.
Ако някой ми даде идея как да реша този проблем ще
съм му много благодарен '<img'>
Страници: 1 [2]