Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

How to parse irc command??? using c

Posted on 2004-10-29
19
Medium Priority
?
409 Views
Last Modified: 2008-03-17
I am looking for help on how to parse irc commands using c:Any have any simple code I can look at or a link etc that can point me into the right direction on how I can do this with using c would be great. I am able to parse it some but I am having a few problems with it.Thank you and any help on this subject would be great.Thank you.
0
Comment
Question by:bbkk
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 10
  • 8
19 Comments
 
LVL 2

Expert Comment

by:Sadrul
ID: 12449423
0
 
LVL 5

Expert Comment

by:van_dy
ID: 12449840
one of the ways is to look into the RFC, other is to see
the source  code already availiable, like epic etc.
0
 

Author Comment

by:bbkk
ID: 12450074
Here is what I got......Or trying..

void ParseMessage(HWND hwnd,char *mes) {

 char *strtotok;
  strtotok = strtok(mes,"\r\n");
  char *finddot,*findsdot,*dot1,*dot2;
     
  if(strtotok != NULL) {
     if(strncmp(strtotok,":",1) == 0) {
      finddot = strstr(strtotok,":")+1;
      findsdot = strstr(finddot,":")+1;
   
      SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)findsdot);
      SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
 
  }
  else {
        SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)strtotok);
      SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
 
  }
  }
while(strtotok) {
 strtotok = strtok(NULL,"\r\n");
 
 if(strtotok != NULL) {
 if(strncmp(strtotok,":",1) == 0) {
  dot1 = strstr(strtotok,":")+1;
 
 dot2 = strstr(dot1,":");
  if( dot2 != NULL) {

      SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)dot2);
      SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
   
   }
   else {
        SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)strtotok);
      SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
 
  }
    }
 
 }
}

 }


problem
Connected
*** Looking up your hostname...
*** Checking ident...
:*** Checking for open socks server...
*** Found your hostname
NOTICE Bk :*** If you are having problems connecting due to ping timeouts, please type /notice 81051CF7 nospoof now.
Welcome to the ROXnet IRC Network Bk!~bk@localhost
:Your host is localhost, running version UnrealIRCd/32 v3.0-Morrigan(fix)
:This server was created Sun Feb 27 2000 at 11:55:29 GMT
:localhost 004 Bk localhost UnrealIRCd/32 v3.0-Morrigan(fix) oOiwghskSaHANTcCfrxebWqBFIZ1dvt lvhopsmntikrRcaqOALQbSeKVfH
:are available on this server
:There are 0 users and 0 invisible on 1 servers
:unknown connection(s)
:I have 0 clients and 0 servers
:Current Local Users: 0  Max: 2
:Current Global Users: 0  Max: 1
:- localhost Message of the Day -
:- 29/10/2004 17:55
:- ****Welcome to test IRC****
:- Hello and welcome I hope you enjoy your stay    
:- If you need andy help just let me know at          
:localhost                                                           <--prob is there   what is making it
 372 Bk :- www.here.com                                   <--prob is there    come out like this??
:-
:-
:-
:-  
:End of /MOTD command.
:+x

Thank you
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

Author Comment

by:bbkk
ID: 12452027
I have fixed this problem by increasing my recv buffer...... but the rfc says you need just a buffer of  512bytes.For what I can tell the reason why I am getting this problem here

:- Hello and welcome I hope you enjoy your stay    
:- If you need andy help just let me know at          
:localhost                                                           <--prob is there   what is making it
 372 Bk :- www.here.com                                   <--prob is there    come out like this??
:-
 is cause that is the end of the 512 bytes and a new 512 bytes is coming into play


Any help on this would be greatly appreciated.
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 12452083
these 512-byte chunks are followed by \r\n i presume? in which case you'll have to get rid of them before appending the rest of the messages.

-- Adil
0
 

Author Comment

by:bbkk
ID: 12453304
How would I go about doing that??? Thank you
0
 

Author Comment

by:bbkk
ID: 12454114
I have figured how to replace the \r\n but this way of parsing the message stil has bugs in it.WOuld like to know of a better way.
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 12454555
one way of doing it would be to check for the last bytes. if they are \r\n, simple replace them with \0. for example:

if(buffer[510] == '\r' && buffer[511] == '\n')
    buffer[510] = 0;

what bugs exactly are you having?

-- Adil
0
 

Author Comment

by:bbkk
ID: 12455392
With the code I have up top I am striping away the \r\n by using strtok().I am adding the \r\n back to the line with  SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
With this code below

void ParseMessage(HWND hwnd,char *mes) {

 char *strtotok;
  strtotok = strtok(mes,"\r\n");
  char *finddot,*findsdot,*dot1,*dot2;
     
  if(strtotok != NULL) {
     if(strncmp(strtotok,":",1) == 0) {
      finddot = strstr(strtotok,":")+1;
      findsdot = strstr(finddot,":")+1;
   
     SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)findsdot);
     SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
     
  }
  else {
       int nLength = GetWindowTextLength(chatrichedit) ;
            SendMessage(chatrichedit, EM_SETSEL, nLength-1, nLength);
       SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)strtotok);
     SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
 
  }
  }
while(strtotok) {
 strtotok = strtok(NULL,"\r\n");
 
 if(strtotok != NULL) {
 if(strncmp(strtotok,":",1) == 0) {
  dot1 = strstr(strtotok,":")+1;
 
 dot2 = strstr(dot1,":")+1;
  if( dot2 != NULL) {

     SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)dot2);
     SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
   
   }
   else {
       SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)strtotok);
     SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
 
  }
    }
 
 }
}

 }



I get this
Connected
*** Looking up your hostname...
*** Found your hostname (cached)
*** Checking ident...
*** Checking for open socks server...
NOTICE Bk :*** If you are having problems connecting due to ping timeouts, please  
^^^^^^^
problem up above should be
*** If you are having problems connecting due to ping timeouts, please
type /notice EA73A891 nospoof now.
Welcome to the ROXnet IRC Network Bk!~bk@localhost
Your host is localhost, running version UnrealIRCd/32 v3.0-Morrigan(fix)
This server was created Sun Feb 27 2000 at 11:55:29 GMT
                                                                        <-------problem should not be a space
are available on this server
There are 0 users and 0 invisible on 1 ser
vers
unknown connection(s)
I have 0 clients and 0 servers
Current Local Users: 0  Max: 2
Current Global Users: 0  Max: 1
- localhost Message of the Day -
- 30/10/2004 23:25
-                
-  Test.com
-   ----------------------------------------------------------
-   Staff
-      joe    jhon        jim          jeff                    
-      jonny   sue        gary        billy      
-      
-                                            
-   Offical Channels:-
-      #Test - Network Representative Channel
-      #TestHelp   - Network help desk
-      #TestStaff - Network staff
-     ----------------------------------------------------------

lhost 372 Bk :-                                       <---this is a problem
-      Random Server   - irc.test.com
-                                    irc.test.net
-      
-      Report abuse by email to admins@test.com
-   ----------------------------------------------------------
End of /MOTD command.
+xPING :localhostPING :localhostPING :localhost     <--- problem pings should be like below
                                                                                      +x
                                                                                      PING :localhost
                                                                                      PING :localhost
                                                                                      PING :localhost



This is with using the code up above.


This is what it looks like that I am parsing
Connected
:localhost NOTICE AUTH :*** Looking up your hostname...
:localhost NOTICE AUTH :*** Checking ident...
:localhost NOTICE AUTH :*** Checking for open socks server...
:localhost NOTICE AUTH :*** Found your hostname
NOTICE Bk :*** If you are having problems connecting due to ping timeouts, please type /notice F8B369B9 nospoof now.
PING :F8B369B9
:localhost 001 Bk :Welcome to the ROXnet IRC Network Bk!~bk@localhost
:localhost 002 Bk :Your host is localhost, running version UnrealIRCd/32 v3.0-Morrigan(fix)
:localhost 003 Bk :This server was created Sun Feb 27 2000 at 11:55:29 GMT
:localhost 004 Bk localhost UnrealIRCd/32 v3.0-Morrigan(fix) oOiwghskSaHANTcCfrxebWqBFIZ1dvt lvhopsmntikrRcaqOALQbSeKVfH
:localhost 005 Bk TOKEN WATCH=128 SAFELIST HCN PREFIX=@+% :are available on this server
:localhost 251 Bk :There are 0 users and 0 invisible on 1 servers
:localhost 253 Bk 1 :unknown connection(s)
:localhost 255 Bk :I have 0 clients and 0 servers
:localhost 265 Bk :Current Local Users: 0  Max: 2
:localhost 266 Bk :Current Global Users: 0  Max: 1
:localhost 375 Bk :- localhost Message of the Day -
:localhost 372 Bk :- 30/10/2004 23:25
:localhost 372 Bk :-                
:localhost 372 Bk :-  Test.com
:localhost 372 Bk :-   ----------------------------------------------------------
:localhost 372 Bk :-   Staff
:localhost 372 Bk :-      joe      jhon        jim          jeff
:localhost 372 Bk :-      jonny   sue        gary        billy      
:localhost 372 Bk :-      
:localhost 372 Bk :-                                            
:localhost 372 Bk :-   Offical Channels:-
:localhost 372 Bk :-      #Test - Network Representative Channel
:localhost 372 Bk :-      #TestHelp   - Network help desk
:localhost 372 Bk :-      #TestStaff - Network staff
:localhost 372 Bk :-     ----------------------------------------------------------
:localhost 372 Bk :-
:localhost 372 Bk :-      Random Server   - irc.test.com
:localhost 372 Bk :-                                    irc.test.net
:localhost 372 Bk :-      
:localhost 372 Bk :-      Report abuse by email to admins@test.com
:localhost 372 Bk :-   ----------------------------------------------------------
:localhost 376 Bk :End of /MOTD command.
:Bk MODE Bk :+x
 

Thank you for your help
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 12456245
first of all,

    if(strncmp(strtotok,":",1) == 0)
    {
        finddot = strstr(strtotok) + 1;

this can be easily rewritten as:

    if(strtotok[0] == ':')
    {
        finddot = strtotok + 1;

however, from what you are doing, i think the whole function can be rewritten as:


void ParseMessage(HWND hwnd,char *mes)
{
    char *str = strrchr(mes, ':'); /* find the last occurance of  :  in the message */

    if(*str)
    {
        str++;
        if(*str)
        {
            /* now you have the extracted message in str.
             * add it in the editbox
             */
        }
    }
}


if function `strrchr' (notice that it is NOT `strchr') is not present in VC library, then define it as following:


char *strrchr(const char *s, char c)
{
    char *ret = 0;
   
    while(*s)
    {
        if(*s == c)
            ret = s;
        s++;
    }
    return ret;
}


-- Adil
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 12456289
a little correction:

str = strrchr(msg, ':');

if(str) // NOT *str
{
...



-- Adil
0
 

Author Comment

by:bbkk
ID: 12456520
Hello Sadrul,
     Your code produces this.....

Connected
*** Looking up your hostname...

*** Checking for open socks server...

48CBB155

There are 0 users and 0 invisible on 1 ser
-      joe  
loca
+x


The problem is that one string can have this...
:localhost 372 Bk :-   Offical Channels:-
:localhost 372 Bk :-      #Test - Network Representative Channel
:localhost 372 Bk :-      #TestHelp   - Network help desk
:localhost 372 Bk :-      #TestStaff - Network staff
:localhost 372 Bk :-     ----------------------------------------------------------
:localhost 372 Bk :-
:localhost 372 Bk :-      Random Ser  

Then another string can come in and have the other half of the string above

ver   - irc.test.com
:localhost 372 Bk :-                                    irc.test.net
:localhost 372 Bk :-      
:localhost 372 Bk :-      Report abuse by email to admins@test.com
:localhost 372 Bk :-   ----------------------------------------------------------
:localhost 376 Bk :End of /MOTD command.
:Bk MODE Bk :+x


I have to take these strings and parse out all the
:localhost 372 Bk :-                                  
:localhost 372 Bk :-      
:localhost 372 Bk :-

etc and at the end of those string I have to take away the \r\n


If I can figure this out I will be sure give more points.Thanks you Sadrul




0
 

Author Comment

by:bbkk
ID: 12456793
Also this is how the format shouild look.

*** Looking up your hostname...
*** Found your hostname (cached)
*** Checking ident...
*** Checking for open socks server...
*** Received identd response
*** If you are having problems connecting due to ping timeouts, please type /notice 4DA5D853 nospoof now.
Welcome to the ROXnet IRC Network forgiven!forgiven@localhost
Your host is localhost, running version UnrealIRCd/32 v3.0-Morrigan(fix)
This server was created Sun Feb 27 2000 at 11:55:29 GMT
localhost UnrealIRCd/32 v3.0-Morrigan(fix) oOiwghskSaHANTcCfrxebWqBFIZ1dvt lvhopsmntikrRcaqOALQbSeKVfH
TOKEN WATCH=128 SAFELIST HCN PREFIX=@+% :are available on this server
There are 1 users and 0 invisible on 1 servers
1 :unknown connection(s)
I have 1 clients and 0 servers
Current Local Users: 1  Max: 2
Current Global Users: 1  Max: 1
- localhost Message of the Day -
- 30/10/2004 23:25
-                
-  Test.com
 -   ----------------------------------------------------------
-   Staff
-      joe      jhon        jim          jeff
-      jonny   sue        gary        billy      
-      
-                                            
-   Offical Channels:-
-      #Test - Network Representative Channel
-      #TestHelp   - Network help desk
-      #TestStaff - Network staff
-     ----------------------------------------------------------
-
-      Random Server   - irc.test.com
-                                    irc.test.net
-      
-      Report abuse by email to admins@test.com
-   ----------------------------------------------------------




Thanks
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 12456872
a successful implementation depends also on how you are receiving the messages from the server. when exactly are you calling ParseMessage? and what is hwnd?

the problem here is that every message ends with CRLF. so does every command. so if a message contains a (or more) complete commands, then it will end with CRLFCRLF, right? that's what i am checking here. if it doesn't, then there is at least one incomplete command. so we parse everything except the incomplete one. the next time we get another message, we append the previous incomplete command at the beginning of the new message, and start parsing.

anyways, here's something i have put together. consider it as pseudo-code, since i have not tested it. i have tried to add some comments, which will hopefully make it clear:

--------------------------------------------------------------------------------
#define BUFFER_SIZE 2048

/* this is the buffer to store incomplete commands/messages */
char buffer[BUFFER_SIZE];

/* this will be parsed */
char parse[BUFFER_SIZE];

/*
 * i am assuming that mes is always 512-bytes ending with CRLF
 */
void ParseMessage(HWND hwnd,char *mes)
{
    char *cmd;

    mes[510] = 0;   /* getting rid of the ending CRLF that is auto-appended*/
   
    /* if any incomplete command is left from previous message,
     * then copy it into the string to be parsed
     */
    strncpy(parse, buffer, BUFFER_SIZE);

    if(mes[508] == '\r' && mes[509] == '\n')
    {
        /* mes contains a complete command
         * nothing needs to be done.
         * buffer should be empty
         */
        buffer[0] = 0;
    }
    else
    {
        /* mes contains an incomplete command,
         * because every command ends with CRLF.
         * so, save the incomplete command in buffer
         * and make the incomplete command invisible
         */
        char *inc = strrchr(mes, '\n');
        if(inc)
        {
            inc++;      /* start of the incomplete command */
            strncpy(buffer, inc, BUFFER_SIZE);/* save the incomplete command */
            *inc = 0;   /* make the incomplete command invisible now */
        }
    }

    /* add the new message in the parse-string */
    strncat(parse, mes, BUFFER_SIZE);

    cmd = strtok(parse, "\r\n");

    while(cmd)
    {
        char *str = strrchr(mes, ':'); /* last occurance of : in the message */

        if(str)
        {
            str++;
            if(*str)
            {
                /* now you have the extracted message in str.
                 * add it in the editbox
                 */
            }
        }

        cmd = strtok(NULL, "\r\n");
    }
}
--------------------------------------------------------------------------------

-- Adil
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 12457010
correction again:

       char *str = strrchr(cmd, ':'); /* should be cmd, not mes */

OR, the whole loop could look like:

    while(cmd)
    {
        char str[BUFFER_SIZE], dummy[BUFFER_SIZE];
        char *prnt;
        /* since the message always seems to have similar initial words */
        sscanf(cmd, ":%s %s %s %[^\0]", dummy, dummy, dummy, str);
        if(str[0] == ':')
            prnt = str + 1;
        else
            prnt = str;
        if(*prnt)
        {
            /* now you have the extracted message in prnt.
             * add it in the editbox
             */
        }

        cmd = strtok(NULL, "\r\n");
    }

-- Adil
0
 

Author Comment

by:bbkk
ID: 12458394
Hello there Sadrul,

this code here is close.


//////////////Server connection
#define BUFFER_SIZE 2048


/* this is the buffer to store incomplete commands/messages */
char buffer[BUFFER_SIZE];

/* this will be parsed */
char parse[BUFFER_SIZE];

/*
 * i am assuming that mes is always 512-bytes ending with CRLF
 */


void ParseMessage(HWND hwnd,char *mes)
{
    char *cmd;

    mes[510] = 0;   /* getting rid of the ending CRLF that is auto-appended*/
   
    /* if any incomplete command is left from previous message,
     * then copy it into the string to be parsed
     */
    strncpy(parse, buffer, BUFFER_SIZE);

    if(mes[508] == '\r' && mes[509] == '\n')
    {
        /* mes contains a complete command
         * nothing needs to be done.
         * buffer should be empty
         */
        buffer[0] = 0;
    }
    else
    {
        /* mes contains an incomplete command,
         * because every command ends with CRLF.
         * so, save the incomplete command in buffer
         * and make the incomplete command invisible
         */
        char *inc = strrchr(mes, '\n');
        if(inc)
        {
            inc++;      /* start of the incomplete command */
            strncpy(buffer, inc, BUFFER_SIZE);/* save the incomplete command */
            *inc = 0;   /* make the incomplete command invisible now */
        }
    }

    /* add the new message in the parse-string */
    strncat(parse, mes, BUFFER_SIZE);

    cmd = strtok(parse, "\r\n");

      while(cmd)
    {
        char str[BUFFER_SIZE], dummy[BUFFER_SIZE];
        char *prnt;
        /* since the message always seems to have similar initial words */
        sscanf(cmd, ":%s %s %s %[^\0]", dummy, dummy, dummy, str);
        if(str[0] == ':')
            prnt = str + 1;
        else
            prnt = str;
        if(prnt)
        {
             SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)str);
             SendMessage(chatrichedit,  EM_REPLACESEL, 0, (LPARAM)"\r\n");
        }

        cmd = strtok(NULL, "\r\n");
    }
}

THe code produces this...

"Note, I added the bad spots with <--- etc in the formated message"

Connected
:*** Looking up your hostname...
:*** Found your hostname (cached)
:*** Checking ident...
:*** Checking for open socks server...
:*** Checking for open socks server...
:*** Checking for open socks server...
:Welcome to the ROXnet IRC Network Bk!~bk@localhost
:Your host is localhost, running version UnrealIRCd/32 v3.0-Morrigan(fix)
:This server was created Sun Feb 27 2000 at 11:55:29 GMT
localhost UnrealIRCd/32 v3.0-Morrigan(fix) oOiwghskSaHANTcCfrxebWqBFIZ1dvt lvhopsmntikrRcaqOALQbSeKVfH
TOKEN WATCH=128 SAFELIST HCN PREFIX=@+% :are available on this server
:There are 0 users and 0 invisible on 1 svers <-- problem should be servers not svers
1 :unknown connection(s)
:I have 0 clients and 0 servers
:Current Local Users: 0  Max: 2
:Current Global Users: 0  Max: 2
:- localhost Message of the Day -
:- 30/10/2004 23:25
:-                
:-  Test.com
:-   ----------------------------------------------------------
:-   Staff
:-      joe    jhon        jim          jeff
:-      jonny   sue        gary        billy      
:-      
:-                                            
:-   Offical Channels:-
:-      #Test - Network Representative Channel
:-      #TestHelp   - Network help desk
:-      #TestStaff - Network staff
:-     ----------------------------------------------------------
:-
:-      Random Server   - irc.test.com
:-                                    irc.test.net
:-      
:-      Report abuse by email to admins@test.com
:-   ----------------------------------------------------------
:End of /MOTD command.
:+x   <--- this one is ok cause its suppose to be there
:+x    <--Whne a PING Command comes in it produces the user mode etc --> :+x -->
:+x     <-- when it should be PING:LOCALHOST or just LocalHost -->
:+x


 Thank you Sadrul for your time.

GOing to go play with the could to see if I can do something with it.

 
0
 

Author Comment

by:bbkk
ID: 12458522
Ok I got this problem solved

:There are 0 users and 0 invisible on 1 svers <-- problem should be servers not svers


just have to solve this real quick and it looks like it will be good to go.
:+x   <--- this one is ok cause its suppose to be there
:+x    <--Whne a PING Command comes in it produces the user mode etc --> :+x -->
:+x     <-- when it should be PING:LOCALHOST or just LocalHost -->
:+x

going back to pay with the code alittle more.
0
 
LVL 2

Accepted Solution

by:
Sadrul earned 540 total points
ID: 12459153
what does the PING commands that come in look like?

i hope you realize that in the code above, the actual commands are all ignored (we are getting rid of them using `dummy'). so a good option would be to read the command in a variable, see what the command is, and take appropriate action.

-- Adil
0
 

Author Comment

by:bbkk
ID: 12460477
Yeah I agree with ya about , "a good option would be to read the command in a variable, see what the command is, and take appropriate action.", this is what I am doing and everythihng seems to be working and going smoothly.

I have another account but could not get into it cause I for got my user name etc so I created this one but I finally found the paper that had my user name and password so I  am going to give you these points and close this account and give yousome of my points from my other account.Just look in the c forum where its going to say points for  Sadrul :).Just go in there an say hi or bye or what ever so I can give you the points.Good day and thank you for your time and help.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.

609 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question