14:21
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
printf > printf2
theAloneДата: Пятница, 01.08.2008, 13:34 | Сообщение # 1
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
Помогите плиз как перевести функцию printf к printf2?

Code
printf2(printmess2[], Float,...)
{
if(PrintTo==1)
{
printf(printmess2[0], Float,...);
}
else
{
}
}

Мой вариант, но у меня пишет типа warning 213: tag mismatch (Тоесть у меня например

printf2("DEBUG: %s has sit in vehicle %s[ID %d | Model ID: %d | Passenger %d]",wtf,vehName[GetVehicleModel(vehicleid)-400][0], vehicleid, GetVehicleModel(vehicleid), ispassenger);

Скрипт разрешает только с 1 (Например: printf2("Maximal Ping: %d",maxping);)

P.S обьяснил как мог

SpiritДата: Пятница, 01.08.2008, 14:11 | Сообщение # 2
Освоившийся
Группа: Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус:
При вызове функции с переменным числом параметров в вызове этой функции задается любое требуемое число аргументов. В объявлении и определении такой функции переменное число аргументов задается многоточием в конце списка формальных параметров или списка типов аргументов.

Все аргументы, заданные в вызове функции, размещаются в стеке. Количество формальных параметров, объявленных для функции, определяется числом аргументов, которые берутся из стека и присваиваются формальным параметрам. Программист отвечает за правильность выбора дополнительных аргументов из стека и определение числа аргументов, находящихся в стеке.

Примерами функций с переменным числом параметров являются функции из библиотеки функций языка СИ, осуществляющие операции ввода-вывода информации (printf,scanf и т.п.). Подробно эти функции рассмотрены во третьей части книги.

Программист может разрабатывать свои функции с переменным числом параметров. Для обеспечения удобного способа доступа к аргументам функции с переменным числом параметров имеются три макроопределения (макросы) va_start, va_arg, va_end, находящиеся в заголовочном файле stdarg.h. Эти макросы указывают на то, что функция, разработанная пользователем, имеет некоторое число обязательных аргументов, за которыми следует переменное число необязательных аргументов. Обязательные аргументы доступны через свои имена как при вызове обычной функции. Для извлечения необязательных аргументов используются макросы va_start, va_arg, va_end в следующем порядке.

Макрос va_start предназначен для установки аргумента arg_ptr на начало списка необязательных параметров и имеет вид функции с двумя параметрами:

void va_start(arg_ptr,prav_param);

Параметр prav_param должен быть последним обязательным параметром вызываемой функции, а указатель arg_prt должен быть объявлен с предопределением в списке переменных типа va_list в виде:

va_list arg_ptr;

Макрос va_start должен быть использован до первого использования макроса va_arg.

Макрокоманда va_arg обеспечивает доступ к текущему параметру вызываемой функции и тоже имеет вид функции с двумя параметрами

type_arg va_arg(arg_ptr,type);

Эта макрокоманда извлекает значение типа type по адресу, заданному указателем arg_ptr, увеличивает значение указателя arg_ptr на длину использованного параметра (длина type) и таким образом параметр arg_ptr будет указывать на следующий параметр вызываемой функции. Макрокоманда va_arg используется столько раз, сколько необходимо для извлечения всех параметров вызываемой функции.

Макрос va_end используется по окончании обработки всех параметров функции и устанавливает указатель списка необязательных параметров на ноль (NULL).

Рассмотрим применение этих макросов для обработки параметров функции вычисляющей среднее значение произвольной последовательности целых чисел. Поскольку функция имеет переменное число параметров будем считать концом списка значение равное -1. Поскольку в списке должен быть хотя бы один элемент, у функции будет один обязательный параметр.
Пример:
#include
int main()
{ int n;
int sred_znach(int,...);
n=sred_znach(2,3,4,-1);
/* вызов с четырьмя параметрами */
printf("n=%d",n);
n=sred_znach(5,6,7,8,9,-1);
/* вызов с шестью параметрами */
printf("n=%d",n);
return (0);
}
int sred_znach(int x,...);
{
int i=0, j=0, sum=0;
va_list uk_arg;
va_start(uk_arg,x); /* установка указателя uk_arg на */
/* первый необязятельный параметр */
if (x!=-1) sum=x; /* проверка на пустоту списка */
else return (0);
j++;
while ( (i=va_arg(uk_arg,int))!=-1)
/* выборка очередного */
{ /* параметра и проверка */
sum+=i; /* на конец списка */
j++;
}
va_end(uk_arg); /* закрытие списка параметров */
return (sum/j);
}

Это то как это делается в С++, тут помоему этого неполучится, вообще непонимаю зачем тебе printf переписывать, когда есть готорый.
Материал взят с http://www.codenet.ru/


Любиш садизм люби и мазахизм :)
theAloneДата: Пятница, 01.08.2008, 14:18 | Сообщение # 3
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
Если бы мне было ненужно я бы не спрашивал.
OrangeДата: Пятница, 01.08.2008, 16:22 | Сообщение # 4
Уважаемый человек
Группа: Продвинутые
Сообщений: 945
Награды: 6
Город: San Fierro
Репутация: 101
Замечания: 0%
Статус:
блин, попробуй юзани format(string, sizeof(string), ""DEBUG: %s has sit in vehicle %s[ID %d | Model ID: %d | Passenger %d]",wtf,vehName[GetVehicleModel(vehicleid)-400][0], vehicleid, GetVehicleModel(vehicleid), ispassenger);
printf(string);



theAloneДата: Пятница, 01.08.2008, 18:27 | Сообщение # 5
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
Mishanzanza, я знаю про этот способ. У меня в моде 8000 строк и много текста! Яб тогда не спрашивал :р

Я спрашиваю именно про это.

SpiritДата: Суббота, 02.08.2008, 07:31 | Сообщение # 6
Освоившийся
Группа: Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус:
Ты скажи зачем тебе это нужно, наверняка есть другой способ как это сделать.


Любиш садизм люби и мазахизм :)
DarkByteДата: Суббота, 02.08.2008, 08:22 | Сообщение # 7
Долгожитель
Группа: Продвинутые
Сообщений: 1577
Награды: 7
Город: Челябинск
Репутация: 182
Замечания: 0%
Статус:
Quote (|DPS|EvilRiaz)
Помогите плиз как перевести функцию printf к printf2?

Насколько я помню, есть встроенные переменные в названии которых есть arg, которые содержат параметры и их количество.
Ага, нашёл, numargs, getarg, setarg, вроде бы оно... вобщем нашёл пример, sprintf, функция аналогична printf, только выводит не в консоль, а в строку,
т.е. в конце ф-и можно заменить return string; на твоё условие if (PrintTo==1) printf(string);

Code
stock sprintf(const Format[], {Float,_}:...) //by Peter
{
      new bool:searching, x;

      new string[256], tmp[256], tmp2[256];
      new currarg, i;
      currarg=1;
      for(i=0; i < strlen(Format); i++) {
          if(Format[i] != '%') {
              string[strlen(string)] = Format[i];
              string[strlen(string)] = '\0';
              continue;
           }
          if(Format[i] == '%' && Format[i+1] == '%') {
              string[strlen(string)] = Format[i];
              string[strlen(string)] = '\0';
              i++;
              continue;
           }
           searching = true;

          new tempFormat[256];

          while(searching) {
              tempFormat[strlen(tempFormat)] = Format[i];
              tempFormat[strlen(tempFormat)] = '\0';
              switch(Format[i]) {
                  case 's', 'S' : {
                      strdel(tmp, 0, sizeof(tmp));
                      strdel(tmp2, 0, sizeof(tmp2));
                      x=0;
                      for(x=0; getarg(currarg, x) != '\0'; x++) {
                          tmp2[x] = getarg(currarg, x);
                         }
                         tmp2[x] = '\0';
                      format(tmp, sizeof(tmp), tempFormat, tmp2);
                      strcat(string, tmp);
                      searching = false;
                      currarg++;
                     }
                  case 'f', 'F' : {
                      strdel(tmp, 0, sizeof(tmp));
                      format(tmp, sizeof(tmp), tempFormat, Float:getarg(currarg));
                      strcat(string, tmp);
                      searching = false;
                      currarg++;
                     }
                  case 'd', 'D', 'i' : {
                      strdel(tmp, 0, sizeof(tmp));
                      format(tmp, sizeof(tmp), tempFormat, getarg(currarg));
                      strcat(string, tmp);
                      searching = false;
                      currarg++;
                     }
                 }
                 if(searching)
                  i++;
            }
      }

      return string;
}
native sprintf(const Format[], {Float,_}:...);

P.S. Данный код поддерживает флаги %s %S %f %F %d %D %i %%, поддержку других флагом нужно писать самому, если потребуется.



MusicSig vkontakte - расширение функционала ВКонтакте для Google Chrome

Сообщение отредактировал DarkByte - Суббота, 02.08.2008, 08:25
theAloneДата: Воскресенье, 03.08.2008, 19:25 | Сообщение # 8
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
DarkByte, большое спасибо)
MAKДата: Воскресенье, 03.08.2008, 21:42 | Сообщение # 9
Группа: Следователи
Сообщений: 2342
Награды: 35
Город: ODESSA
Репутация: 646
Замечания: 0%
Статус:
закрыто


Оплатили голосами за услугу и её не выполняют более чем 4 дня? - Обращайтесь.
Вас оскорбили или поступили нечестно? - Обращайтесь.
Увидели на форуме спам\флуд, а модератора нет? - Обращайтесь.

Не забывайте указывать в названии сообщения тему, пример: "Перевод за голоса".
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua