[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. G0lovorez 2033

    G0lovorez 2033 New Member

    Joined:
    21 Apr 2009
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    скажите код bb кода для сайта пожалуйста
     
  2. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
  3. G0lovorez 2033

    G0lovorez 2033 New Member

    Joined:
    21 Apr 2009
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    и еще подскажите пожалуйста как в подписе можно разместить код с кнопкой на сайт и чтобы кнопка работала а не просто анимашка была
     
  4. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    [c/c++] Новичкам: задаем вопросы

    Ты не ошибся?

    Почитай статью hidden'а, там что-то было про подпись. Попробуй картинку сделать гиперссылкой.
     
  5. G0lovorez 2033

    G0lovorez 2033 New Member

    Joined:
    21 Apr 2009
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    Fata1ex а как?
     
  6. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
  7. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Где можно просмотреть vtable(vftable)? VS2008
    Нужно посмотреть сколько функций будет в них.
     
  8. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Компилятору не доверяешь? копай в сторону 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)	*
    
     
    #3048 Ra$cal, 5 Jun 2009
    Last edited: 5 Jun 2009
    1 person likes this.
  9. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    Доброго времени суток.
    такая ситуация: есть дириктория с большим количеством файлов с буквально рандомными именами.
    Вопрос есть ли в С++ какая то функция позволяющая внести все эти имена в указанной директорие внести в масив?


    просто собственно хочу написать парсер. и мне интересно как реализовать парсинг не одного файла а всех файлов в директорие. МОжет так будет понятне... может у кого то есть сорцы парсеров каких то... подкинте для примера если не жалко...
     
  10. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    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);
    }
    
     
    _________________________
  11. xxxxxxxxxxxxxxx

    xxxxxxxxxxxxxxx Elder - Старейшина

    Joined:
    20 Jan 2008
    Messages:
    66
    Likes Received:
    8
    Reputations:
    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); 
                    
                } 
             } 
       }
    } 
     
  12. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Помогите решить такую задачу на языке Си:

    Реал изовать базу данн ых “служащие” в виде файла, содержащего имя, фамилию и отчество служащего, а также его рейтинг. Уметь: 1) вводить данные; 2)удалять данные; 3)изменять данные; 4) сортировать данные по любому столбцу; 5) выводить данные на экран.

    В Паскале можно было бы с помощью записей сделать, а тут не знаю как...
     
  13. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    А тут с помощью структур)
     
    1 person likes this.
  14. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    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();
    		}
    		
    		# Мне надо бежать, дальше думаю понятно
    				
    Вот набросал что-то. Сейчас нужно уходить, поэтому не закончил. Посмотри, думаю принцип понятен.
     
    #3054 Fata1ex, 6 Jun 2009
    Last edited: 6 Jun 2009
    1 person likes this.
  15. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Как унаследовать 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>> :{ как быть?

    РЕШЕНО
     
    #3055 Glazz, 7 Jun 2009
    Last edited: 8 Jun 2009
  16. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    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(). Подозреваю, что это лаба на ранних курсах института, прикольно будет если напугаешь препода знанием таких методов.
     
    #3056 ss88, 8 Jun 2009
    Last edited: 8 Jun 2009
    1 person likes this.
  17. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    ниже кусок кода. как сделать чтобы не открывалась стразу страница 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);
            }
     
  18. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    Code:
    char URL[1024]="";
    (void)scanf("%s",URL);
    char *result=OpenURL(URL);
    
    + лучше не проверяй строку просто так вот, лучше сравнивай с null. Это касается и всех остальных типов.
     
    #3058 ss88, 8 Jun 2009
    Last edited: 8 Jun 2009
    1 person likes this.
  19. Roston

    Roston Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    337
    Likes Received:
    104
    Reputations:
    8
    [C++]
    народ плз напише ф-цию сортировки масива с помощью указателей.... именно их потому что я масив буду сортировать несколько раз и с разными исходными даными(от какого елемента до какого)...
     
  20. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    не совсем понятно условие, заюзай qsort() или уточни свою проблему
     
Thread Status:
Not open for further replies.