No need for the loop.
Just a general hint of advice-
When you have problems in your code, output the values to the screen at each step so you can see what they are. Many times this will lead to a solution. For example: in your program if you would have printed out the token each time you tokenized I think you might have been able to figure out what was wrong.
Took out the loop and switched a few things around.
Code:
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
char phone[15];
char num[10];
char* tokenPtr;
int areaCode;
cout << "Enter a phone number [(###) ###-####]: ";
cin.getline(phone, 15);
tokenPtr = strtok(phone, "()- "); //for tokenising the phonenum.
areaCode = atoi(tokenPtr);//converting strign to integer
tokenPtr = strtok(NULL, "()- ");
strcpy(num, tokenPtr);
tokenPtr = strtok(NULL, "()- ");
strcat(num, tokenPtr);
cout << areaCode << " " << atol(num) << endl;
return 0;
}