и еще подскажите пожалуйста как в подписе можно разместить код с кнопкой на сайт и чтобы кнопка работала а не просто анимашка была
[c/c++] Новичкам: задаем вопросы Ты не ошибся? Почитай статью hidden'а, там что-то было про подпись. Попробуй картинку сделать гиперссылкой.
Компилятору не доверяешь? копай в сторону this. втбала явно не далеко от него. ну или прочитай про основы com. там дается бинарное описание положения таблицы, совпадающее с выходным бинарем мсовских компилей. в моей 2003 студии например вот таблица как находится Code: - this 0x0012fec4 {x=0 } Worker * const - __vfptr 0x00427340 const Worker::`vftable' * [0] 0x00401230 Worker::foo(void) * [1] 0x00406240 Worker::bar(void) *
Доброго времени суток. такая ситуация: есть дириктория с большим количеством файлов с буквально рандомными именами. Вопрос есть ли в С++ какая то функция позволяющая внести все эти имена в указанной директорие внести в масив? просто собственно хочу написать парсер. и мне интересно как реализовать парсинг не одного файла а всех файлов в директорие. МОжет так будет понятне... может у кого то есть сорцы парсеров каких то... подкинте для примера если не жалко...
Code: #include <dirent.h> #include <stdio.h> #include <stdlib.h> void scandir(char *dirname) { DIR *dir; struct dirent *ent; printf("Directory '%s':\n",dirname); if ((dir = opendir(dirname)) == NULL) { perror("Unable to open directory"); exit(1); } while ((ent = readdir(dir)) != NULL) printf("%s\n",ent->d_name); } void main() { scandir("."); exit(0); }
Code: #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <dirent.h> #include <sys/stat.h> #include <stdio.h> #include <sys/types.h> char *curdir; int filter(const struct dirent *s) { char fullname[300]; struct stat st; if(s->d_name[0]!='.'){ return 1; } return 0; } int main(int argc, char **argv){ struct dirent **e; struct stat s; struct tm *tmfile; int i,dirsize,k; char *empty[]={0,".",0}; char **list=argv; char fullname[300]; if(argc==1) list=empty,argc=2; for (i = 1; i < argc; i++){ if(argc!=2) curdir=list[i]; dirsize=scandir(list[i],&e,filter, 0); if (dirsize<0){ printf("scandir fails at %s: %s\n",list[i],strerror(errno)); continue; } for(k=0;k<dirsize;k++){ sprintf(fullname,"%s/%s",list[i],e[k]->d_name); if(stat(fullname, &s)==-1) printf("stat fails at %s: %s\n",fullname,strerror(errno)); else{ printf ("%s ", e[k]->d_name); } } } }
Помогите решить такую задачу на языке Си: Реал изовать базу данн ых “служащие” в виде файла, содержащего имя, фамилию и отчество служащего, а также его рейтинг. Уметь: 1) вводить данные; 2)удалять данные; 3)изменять данные; 4) сортировать данные по любому столбцу; 5) выводить данные на экран. В Паскале можно было бы с помощью записей сделать, а тут не знаю как...
Code: class Empl { private : string Name; string LName; int Rate; public : Empl(); Empl(string inName, string inLName, int Rate); void setName(string inName); void setLName(string inLName); void setRate(int inRate); string getName(); string getLName(); int getRate(); #void del(); #void display(); }; Empl::Empl() { Name=''; LName=''; Rate=-1; } Empl::Empl(string inName, string inLName, int Rate) { Name = inName; LName = inLName; Rate = inRate; } # Далее определишь все остальное, мне лень ;( #database const int MaxEmpl = 100; const int FirstEmplNum = 1; class database { private : Empl iEmpl[MaxEmpl]; int NextSlot; int NextEmplNum; public : database(); Empl& addEmpl(string inName, string inLName, int inRate); Empl& getEmpl(int inEmplNum); Empl& getEmpl(string inName, string inLName); void display(); ... # все варианты вывода данных }; database::database() { NextSlot = 0; NextEmplNum = FirstEmplNum; } Empl& database::addEmpl(string inName, string inLName) { if (NextSlot >= MaxEmpl) { cerr << " No more places here ;(" << endl; throw exception(); } Empl& tEmpl = iEmpl[NextSlot++]; tEmpl.setName(inName); tEmpl.setLName(inLName); tEmpl.setRate(inRate); return tEmpl; } Empl& database getEmpl(int inEmplNum) { for (iny i = 0; i < NextSlot; i++) { if (iEmpl[i].getEmplNum() == inEmplNum) { return iEmpl[i]; } } cerr << "There is no person with number " << inEmplNum << endl; throw exception(); } # Мне надо бежать, дальше думаю понятно Вот набросал что-то. Сейчас нужно уходить, поэтому не закончил. Посмотри, думаю принцип понятен.
Как унаследовать Glib::IOChannel ? Мне нужно , чтоб можно было сделать подобие Glib::IOChannel::create_from_fd(); Непонятно, как класс узнает fd , если я просто наследую. Хранит fd он походу в private(но не уверен). Где - то видел, что создание с помощью fd происходит так : Glib::RefPtr<IOChannel> IOChannel::create_from_fd(int fd) { return Glib::wrap(g_io_channel_unix_new(fd), false); } Я думал сделать подобие этого, но только на мой класс-наследник поменять, но вот wrap(g_io_channel_*, false); возвращает Glib::RefPtr<Glib::IOChannel>> :{ как быть? РЕШЕНО
Code: #include <stdio.h> #include <stdlib.h> #include <string.h> enum {EMPLOYEE_COUNT=100, NAME_LEN_MAX=100,LNAME_LEN_MAX=100}; typedef struct { char name[NAME_LEN_MAX]; char lname[LNAME_LEN_MAX]; int rate; } employee_t; int get_empl_from_db(const char * file_name, employee_t * list); void print_empl_list(employee_t * list, size_t count); static int cmpbyname(const void * p1, const void * p2); static int cmpbylname(const void * p1, const void * p2); static int cmpbyrate(const void * p1, const void * p2); void sort(employee_t * list,size_t count, int (*cmpitems)(const void * p1, const void * p2)); void save_db(const char * file_name, employee_t * list, size_t count); void add(employee_t new_empl, employee_t * list, size_t count); void delete(size_t del_index, employee_t * list, size_t &count); int main(int argc, char** argv){ size_t empl_count=0; employee_t * empl_list = calloc(EMPLOYEE_COUNT,sizeof(employee_t)); empl_count = get_empl_from_db("db.txt",empl_list); if(empl_count==0){ fprintf(stderr,"Empty database or error reading\n"); exit(EXIT_FAILURE); } printf("%d\n",empl_count); print_empl_list(empl_list, empl_count); sort(empl_list,empl_count,cmpbyrate); print_empl_list(empl_list, empl_count); exit(EXIT_SUCCESS); } int get_empl_from_db(const char * file_name, employee_t * list) { FILE * db_file = fopen(file_name,"rt"); if(db_file == NULL) return 0; int i; for(i=0; !feof(db_file) && i < EMPLOYEE_COUNT; i++) if(fscanf(db_file,"%s %s %d",list[i].name,list[i].lname,&list[i].rate)!=3) break; fclose(db_file); return i; } void save_db(const char * file_name, employee_t * list, size_t count) { FILE * db_file = fopen(file_name,"wt"); if(db_file == NULL) return; for(int i=0; i < count; i++) fprintf(db_file,"%s %s %d\n",list[i].name,list[i].lname,list[i].rate); fclose(db_file); } void add(employee_t new_empl, employee_t * list, size_t count) { if(count == EMPLOYEE_COUNT) return; list[count]=new_empl; } void delete(size_t del_index, employee_t * list, size_t &count) { if(del_index >= count) return; else for(int i = del_index; i<*count-1; i++) list[i]=list[i+1]; --(*count); } void print_empl_list(employee_t * list, size_t count) { for(int i = 0; i < count; i++) printf("%d %s %s %d\n",i+1,list[i].name,list[i].lname,list[i].rate); } static int cmpbyname(const void * p1, const void * p2){ return strcmp(((employee_t *)p1)->name, ((employee_t *)p2)->name); } static int cmpbylname(const void * p1, const void * p2){ return strcmp(((employee_t *)p1)->lname, ((employee_t *)p2)->lname); } static int cmpbyrate(const void * p1, const void * p2){ return (((employee_t *)p1)->rate == ((employee_t *)p2)->rate)?0 :((((employee_t *)p1)->rate < ((employee_t *)p2)->rate)?-1:1); } /* sorting array with qsort() function and refreshing*/ void sort(employee_t * list,size_t count, int (*cmpitems)(const void * p1, const void * p2)){ qsort(list, count, sizeof(employee_t), cmpitems); } формат входного файла Code: имя фамилия рейтинг имя фамилия рейтинг Особо не форматировал код, чтение БД, сохранение, сортировка по любому полю, удаление и добавление есть. Интерфейс делай какой хочешь. Проблемы переполнения буфферов количества работников и имени/фамилии я не рассматривал, т.к. это не приоритетные вопросы в контексте текущей задачи. ПЫ.СЫ. код нужно компилировать в стандарте языка С от 99-го года (с99). Лучше всего для этого подходит gcc (ему в make-файле или из консоли надо указать -std=c99). Есть еще варианты типа Пеллеса и ЛЦЦ, но лучше этого не делать. BC и TC, скорее всего, выдадут несколько ошибок, потому что они нифига не соблюдали стандарт никогда да и разработка этих сред закончилась много ранее появления 99-го стандарта языка С. ПЫ.ПЫ.СЫ. Если сделаешь что-то на этой основе. то разберись, что такое функция qsort(). Подозреваю, что это лаба на ранних курсах института, прикольно будет если напугаешь препода знанием таких методов.
ниже кусок кода. как сделать чтобы не открывалась стразу страница OpenURL("http://forum.antichat.ru/"); а вводился адресс вручную? Code: void main(void) { char *result=OpenURL("http://forum.antichat.ru/"); if (result) { printf("%s",result); free(result); } else { printf("Error # WSABASEERR+%d\n",WSAGetLastError()-WSABASEERR); }
Code: char URL[1024]=""; (void)scanf("%s",URL); char *result=OpenURL(URL); + лучше не проверяй строку просто так вот, лучше сравнивай с null. Это касается и всех остальных типов.
[C++] народ плз напише ф-цию сортировки масива с помощью указателей.... именно их потому что я масив буду сортировать несколько раз и с разными исходными даными(от какого елемента до какого)...