Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 41 из 87<  1 ... 38  39  40  41  42  43  44 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 17.07.2005
Daemon писал(а):
_nic стремная запись, если это С, то оператор new в нем нет, если C++,

Выкинул struct , все таже ошибка :insane:



Партнер
 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Уважаемый, а помоему компилятор попросту ругается на совершенно другие строки кода, у вас их две, а он аж три увидел, весь код в студию, а то буду злится :)

_________________
Ку ку


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 26.07.2006
Похоже я нашел причину моей проблемы! При объявлении char* const resstr = new char[y + 5]; видимо что-то глючит, и вместо y + 5 выделяется y места в памяти. Есстественно при попытке записи за массив происходят глюки... Решается возведением y+5 в круглые скобки!
Добавлено спустя 1 минуту, 14 секунд
А я над этим уже второй месяц парился...
Добавлено спустя 2 минуты, 22 секунды
Да, сейчас проверил - точно. Трабла решена. :D
Добавлено спустя 43 минуты, 21 секунду
mein писал(а):
Как же не критиковать то ... :) ?! Ужас.
Вот теперь можешь покритиковать. ;)
Код:
char* ldtoms(long double ld)
            {
            if(ld > 9999999999999990.00) {return NULL;}

            char ldstr[30];
            char resstr[30];

            ostrstream ustring(ldstr, 30);
            ustring << setiosflags(ios::fixed) << setprecision(2) << ld << ends;

            int x = 0;

            for(int i = strlen(ldstr) - 1, y = -3; i >= -1; i--, x++, y++)
                        {
                        if(y >= 3 && ldstr[i]){resstr[x] = ','; x++; y = 0;}
                        resstr[x] = ldstr[i];
                        }

            resstr[x - 1] = '$';
            resstr[x] = '\0';

            char* result = new char[(x + 1)];
            *(result + x) = '\0';

            for(int i = 0; resstr[i]; i++, x--){*(result + (x-1)) = resstr[i];}

            return result;
            }


Последний раз редактировалось GrIfFiN7 27.08.2007 22:18, всего редактировалось 2 раз(а).

 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
GrIfFiN7 писал(а):
Вот теперь можешь покритиковать.

запутанный, нечитабельный, неформатированный код :tooth:


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 26.07.2006
mein Тут табы с пробелами режутся. Я незнаю как сохранить форматированность.
Ну серьезно, зацени. Какие ошибки? Могу даже действия расписать, если надо.
Цитата:
запутанный, нечитабельный, неформатированный код
А как насчет качества?


 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
GrIfFiN7 писал(а):
Тут табы с пробелами режутся. Я незнаю как сохранить форматированность.

угадай, для чего тэг «Code»?
Добавлено спустя 3 минуты, 31 секунду
GrIfFiN7 А из каких соображений у тебя где-то [], а где-то *() ?

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
всем ленящимся нормально форматировать код, советую юзать Code::Blocks, или Emacs. Там, специально для вас, есть плагины-автоформатеры

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 26.07.2006
Anoss до сих пор не использовал. Спасибо за подсказку.
[] сделал по совету mein, с ним проще, а *() что бы создать строку строго в необходимое количество байт... Хотя я сейчас думаю что можно бы было её просто вернуть, а в функции использовать только [].
А есть ли функция инвертирующая строку?


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
GrIfFiN7 писал(а):
А есть ли функция инвертирующая строку?

В си кажется нет. В данном случае можно заранее расчитать длинну выходной строки и от этого отталкиваться(не нужно будет в конце инвертировать). Вот набросал функцию на си:
Код:
int _ldtoms(double ld, char outstr[], int maxsize)
{
    int i, k, len, newlen;
    char str[30];
    memset(outstr,0,maxsize); /* обнуляем выходной буффер */
    if( ld > 9999999999999990.00 ) return 0;

    len = sprintf(str, "%.2lf", ld); /* форматируем число */

    /* расчитаем длину итоговой строки - 1 */
    newlen = len + (len - 3) / 3 - ( ((len - 3) % 3) ? 0 : 1 );

    if( newlen >= maxsize ) return 0; /* на всякий случай проверка */

    i = len - 1;
    do
        outstr[newlen--] = str[i];
    while(str[i--] != '.'); /* копируем справа налево до точки включительно. Точка будет обязательно. */

    k = 0;
    while( i >= 0 ) /* добавляем запятые */
    {
        if( k++ == 3 )
            k = 0, outstr[newlen--] = ',';
        else
            outstr[newlen--] = str[i--];
    }
    outstr[0] = '$'; /* дорисовываем первый символ */
    return 1;
}

Использовать например так:
Код:
char str[50];
_ldtoms(54354341.556,str,50);
cout<<str;


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 26.07.2006
mein
Цитата:
В данном случае можно заранее расчитать длинну выходной строки и от этого отталкиваться(не нужно будет в конце инвертировать).
Ну я тоже сначала от этого отталкивался, но потом решил обойтись иначе.
А за пример кода - спасибо. :)


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
mein писал(а):
char str[50]; _ldtoms(54354341.556,str,50); cout<<str;

извращенец

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 18.08.2004
Откуда: г.Юбилейный
Подскажите, плиз, компилятор под винду поддерживающий стандарты С.
А то взял книжку Кернигана, Ричи Э "Язык программирования Си", кроме Visual Sdudio больше ничего не знаю...

_________________
Учебные материалы для студентов http://www.studlab.ru/


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Deimos так любой поддерживает. В VS компилятор C++, а C++ содержит в себе C как подмножество.
PS есть неплохая и очень компактная IDE, под названием Code::Blocks, для консольных приложений и обучения - просто отличная вещь.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 18.08.2004
Откуда: г.Юбилейный
Lord_of_Darkness
Спс, пока искал Code::Blocks, нашел еще одну интересную вещь Dev-C++

Появился вот такой вопрос, программа не видит конец файла, вот код:
Код:
#include <stdio.h>
#include <stdlib.h>

main() {
       int nc;
       for (nc=0; getchar() != EOF; ++nc);
       printf("%d\n",nc);
       system("PAUSE");
}

_________________
Учебные материалы для студентов http://www.studlab.ru/


 

Member
Статус: Не в сети
Регистрация: 10.03.2004
Откуда: Минск
Deimos Добавьте методу возвращаемое значение.


 

Member
Статус: Не в сети
Регистрация: 18.08.2004
Откуда: г.Юбилейный
force_sk
Не могли вы исправить мой код, не пойму, что имеете ввиду...

_________________
Учебные материалы для студентов http://www.studlab.ru/


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Deimos Dev-C++ тоже вещь неплохая, но Code::Blocks для меня удобнее. Есть плагин-автоформаттер, экспорт кода в HTML и другие вкусности.

Может имелось ввиду это?
Код:
#include <stdio.h>
#include <stdlib.h>

int main() {
       int nc;
       for (nc=0; getchar() != 10; ++nc);
       printf("%d\n",nc);
       system("PAUSE");
       return 0;
}


всетаки EOF с клавиатуры особо не повводишь.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 18.08.2004
Откуда: г.Юбилейный
Lord_of_Darkness
Спасибо, помогло!


 

Member
Статус: Не в сети
Регистрация: 18.08.2004
Откуда: г.Юбилейный
Появилась еше проблема Dev-C++ не отображает русский, вместо него каракули... (

_________________
Учебные материалы для студентов http://www.studlab.ru/


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Deimos в консоли идет вывод в 866 кодовой странице, в редакторе в 1251. Так что, либо настраивать редактор, чтобы писать в нем 866-й, либо писать транслитом.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 41 из 87<  1 ... 38  39  40  41  42  43  44 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan