[ 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. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Честно говоря ВООБЩЕ не понимаю, что тут делается. Если не трудно опишите хотя бы кратко, что делеют эти строки (особенно первые две)?
     
  2. FrMn

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

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    возьми любую книжку по си, где объясняются основы синтаксиса, и почитай.
     
  3. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Погуглил и нашёл вот такую функцию:

    Code:
    # include <stdio.h>
    # include <stdlib.h>
    int main() {
        int n;
        char n0;
        printf("Enter n, please:");
        scanf("%f", n);
        itoa(n, n0, 10);
        printf("%s", n0);
    }
    
    Но вот только не пойму почему скомпиленная программа зависает.

    И ещё не могу понять, как может строка быть в какой-то системе исчисления (у меня в десятичной)? Ведь это же не число?
     
  4. pento

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

    Joined:
    3 Jul 2006
    Messages:
    126
    Likes Received:
    24
    Reputations:
    -1
    И для чего интересно такой код может понадобиться?
    А что по-твоему делает вот эта строчка:
    scanf("%f", n);
    ?
     
  5. vikseriq

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

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Делай так:
    1 читаешь строку функцией cin либы iostream
    2 делаешь цикл:
    2.1 для i=1 до длины строки
    2.2 для j=i до конца строки.
    3 в цикле проверка, если str=str[j], то есть одинаковые символы.
    Вот и все.
     
  6. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Это часть кода. Программа должна определить, есть ли в четырёхзначном числе одинаковые цифры.



    А эта библиотека и в С есть? а то в Wikipedia написано, что это библиотека из С++.
     
  7. vikseriq

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

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Паскаль РУЛИТ!!!!

    Code:
    var a:string; i,j:byte;  
    begin  	
      readln(a);  	
      for i:=1 to length(a) do  		
       for j:=i to length(a) do begin  			
        if a[i]=a[j] then begin 
         writeln('Odinakovo');  			
         halt;  		        
       end;                 
     end;   
    writeln('neodinakovo');  
    end .
    Это на паскале, ибо си я не знаю на 10, а компилятора под рукой нет. суть уловил, надеюсь.
     
  8. jawbreaker

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

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Как определить есть ли в четырехзначном числе одинаковые цифры???

    Code:
    #include <stdio.h>
    
    int main()
    {
        int a;
        scanf("%d\n", &a);
        int a3 = (a/1000)%10;
        int a2 = (a/100)%10;
        int a1 = (a/10) % 10;
        int a0 = a % 10;
        if((a0 == a1) && (a1 == a2) && (a2 == a3))
            printf("Equal\n");
        else
            printf("Not equal\n");
    
        return 0;
    }
    И всё!
     
    #1688 jawbreaker, 4 Oct 2008
    Last edited: 4 Oct 2008
  9. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Мне тогда не совсем понятен смысл ф-ций RegOpenCurrentUser,RegOpenUserClassesRoot.В описание последней "Retrieves a handle to the HKEY_CLASSES_ROOT key for the specified user." Как тогда понимать фразу "key for the specified user" если "ульи всегда стандартны" ?
     
  10. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Всем доброго времени суток. Помогите, плиз, подружить Builder с wpcap'ом :)
    Пытаюсь сделать вывод инфы в Memo-поле. Вот исходник:
    Code:
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include <winsock.h>
    #include <time.h>
    #define HAVE_REMOTE
    #include "inc/pcap.h"
    #include "inc/remote-ext.h"
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    #pragma comment(lib,"wpcap.lib")
    #pragma comment(lib,"packet.lib")
    
    TForm1 *Form1;
    TMemo *Memo1;
    
    typedef struct ip_address{
    	u_char byte1;
    	u_char byte2;
    	u_char byte3;
    	u_char byte4;
    }ip_address;
    
    /* IPv4 header */
    typedef struct ip_header{
    	u_char	ver_ihl;		// Version (4 bits) + Internet header length (4 bits)
    	u_char	tos;			// Type of service
    	u_short tlen;			// Total length
    	u_short identification; // Identification
    	u_short flags_fo;		// Flags (3 bits) + Fragment offset (13 bits)
    	u_char	ttl;			// Time to live
    	u_char	proto;			// Protocol
    	u_short crc;			// Header checksum
    	ip_address	saddr;		// Source address
    	ip_address	daddr;		// Destination address
    	u_int	op_pad;			// Option + Padding
    }ip_header;
    
    /* UDP header*/
    typedef struct udp_header{
    	u_short sport;			// Source port
    	u_short dport;			// Destination port
    	u_short len;			// Datagram length
    	u_short crc;			// Checksum
    }udp_header;
    
    /* prototype of the packet handler */
    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    pcap_if_t *alldevs;
    pcap_if_t *d;
    int inum;
    int i=0;
    pcap_t *adhandle;
    char errbuf[PCAP_ERRBUF_SIZE];
    u_int netmask;
    char packet_filter[] = "ip and udp";
    struct bpf_program fcode;
    
    	/* Retrieve the device list */
    	if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
    	{
                    Memo1->Lines->Add("Error in pcap_findalldevs:" + IntToStr(errbuf));
    		exit(1);
    	}
    
    	/* Print the list */
    
    	inum = 2;
    
    	/* Jump to the selected adapter */
    	for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
    
    	/* Open the adapter */
    	if ((adhandle= pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000,  NULL, errbuf)) == NULL)
    	{
                    Memo1->Lines->Add("Unable to open the adapter.");
    		pcap_freealldevs(alldevs);
    		exit(1);
    	}
    
    	/* Check the link layer. We support only Ethernet for simplicity. */
    
    	if(d->addresses != NULL)
    		netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
    	else
    		netmask=0xffffff;
    	//compile the filter
    	if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
    	{
                    Memo1->Lines->Add("Unable to compile the packet filter. Check the syntax.");
    		pcap_freealldevs(alldevs);
    		exit(-1);
    	}
    
    	if (pcap_setfilter(adhandle, &fcode)<0)
    	{
                    Memo1->Lines->Add("Error setting the filter.");
    		pcap_freealldevs(alldevs);
    		exit(-1);
    	}
    	pcap_freealldevs(alldevs);
    	pcap_loop(adhandle, 0, packet_handler, NULL);
    }
    
    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
    {
            TForm *Form1;
    	ip_header *ih;
    	udp_header *uh;
    	u_int ip_len;
    	u_short sport,dport;
    
    	ih = (ip_header *) (pkt_data + 14); //length of ethernet header
    
    	/* retireve the position of the udp header */
    	ip_len = (ih->ver_ihl & 0xf) * 4;
    	uh = (udp_header *) ((u_char*)ih + ip_len);
    
    	/* convert from network byte order to host byte order */
    	sport = ntohs( uh->sport );
    	dport = ntohs( uh->dport );
    
    	/* print ip addresses and udp ports */
            Memo1->Lines->Add(ih->saddr.byte1 + ih->saddr.byte2 + ih->saddr.byte3 + ih->saddr.byte4);
    }
    //---------------------------------------------------------------------------
    
    При нажатии на Button прога "зависает". Если сделать трассировку (F7/F8), то билдер ругается на
    Code:
            Memo1->Lines->Add(ih->saddr.byte1 + ih->saddr.byte2 + ih->saddr.byte3 + ih->saddr.byte4);
    
    В чем ошибка?
     
  11. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Требуется создать двумерный массив заданной длины. Срочно !
     
    1 person likes this.
  12. Ch3ck

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

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    Code:
    #define ROW 5;
    #define COL 5;
    void main() {
    int a[ROW] [COL];
    }
    :) ...
     
  13. Larionich

    Larionich Member

    Joined:
    21 Sep 2008
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    Двумерный динамический создавай так:
    Code:
    int rows, cols;
    cin >> rows >> cols;
    int **pMass = new int *[rows];
    for (int i = 0; i < rows; i++)
      pMass[i] = new int[cols];
    Обращаться например так:
    Code:
    Temp=Mass[i][j];
    Можно воспользоваться стандартными контейнерами:
    Code:
    vector < vector<int> > Mass (sizecol, vector <int> (sizerow) );
     
  14. bons

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

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    вроде как Memo1->Lines->Add строку выводит а ты туда пишешь число. Попробуй функцию inet_ntoa, она возвращает IP-адрес в виде ANSIZ строки с точками
     
  15. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Не. Он в любом случае ругается, даже если я туда строку вставлю...
     
  16. ronald

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

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    :D "Погуглил я и нашёл такую функцию" int main() :D
     
  17. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Гениально! Большое спасибо! Это решение гораздо проще, чем я там мудрил.

    Спасибо!
     
  18. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Если я вместо последнего Memo1->Lines->Add, делаю
    Code:
    ShowMessage(AnsiString(ih->saddr.byte1));
    То спустя какое-то время выскакивает-таки мое окошко...правда приходится много раз на "ОК" нажимать...
     
  19. bons

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

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    тогда попробуй так, рано или поздно получится;):

    Code:
    Memo1->Lines->Add(IntToStr(ih->saddr.byte1)+"."+IntToStr(ih->saddr.byte2)+"." +IntToStr(ih->saddr.byte3)+"."+IntToStr(ih->saddr.byte4));
    
    или так:

    Code:
    char buf[64];
    ...
    wsprintf(buf, "%u.%u.%u.%u", ih->saddr.byte1,ih->saddr.byte2,ih->saddr.byte3,ih->saddr.byte4);
    Memo1->Lines->Add(AnsiString(buf));
    
    или даже так

    Code:
    Memo1->Lines->Add(AnsiString(inet_ntoa(*(struct in_addr*)&ih->saddr))));
    

    под рукой билдера нет, но что-нить из этого точно должно работать :)
     
    #1699 bons, 4 Oct 2008
    Last edited: 4 Oct 2008
  20. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Доброго времени суток.
    Как в MFC приложение добавить красочный 32-битн. тулбар? (заранее нарисован)
    По дефолту в VisualStudio2008 ставится 8 бит и все мои попытки нарисовать прикольный тулбар и импортировать его в существующий проект сводились к тому что изображение с 32-х битного становилось 8-битн..
    Спасибо.
     
    _________________________
Thread Status:
Not open for further replies.