Code:
int ReadDials (char &, char &, char &, char &, char &, char &, char &, char &);
int ToDigit (char &);
void AcknowledgeCall(char, char, char, char, char, char, char, char);
int main()
{
char d1, d2, d3, d4, d5, d6, d7, d8;
int ReturnValue = 0;
while (ReturnValue != -5)
{
ReturnValue = ReadDials(d1, d2, d3, d4, d5, d6, d7, d8);
switch(ReturnValue)
{
case -1: cout <<"ERROR- An invalid character was entered." << endl; break;
case -2: cout <<"ERROR- Phone number can't begin with 0." << endl; break;
case -3: cout <<"ERROR- Phone number can't begin with 555." << endl; break;
case -4: cout <<"ERROR- Hyphen is not in the correct posistion." << endl; break;
case -5: cout <<"Good bye!" << endl; break;
default: AcknowledgeCall(d1, d2, d3, d4, d5, d6, d7, d8);
}
}
return 0;
}
int ReadDials (char &d1, char &d2, char &d3, char &d4, char &d5, char &d6, char &d7, char &d8)
{
int i = 0;
int result = 0;
cout << "Enter a phone number in the following format (123-4567): ";
cin >> d1;
if(d1 == 'Q' || d1 == 'q')
return -5;
cin >> d2 >> d3 >> d4 >> d5 >> d6 >> d7 >> d8;
if(d1 == '0')
return -2;
else if(d1 == '5' && d2 == '5' && d3 == '5')
return -3;
else if(d4 != '-')
return -4;
result = ToDigit(d1);
if(result != 0)
return result;
result = ToDigit(d2);
if(result != 0)
return result;
result = ToDigit(d3);
if(result != 0)
return result;
result = ToDigit(d4);
if(result != 0)
return result;
result = ToDigit(d5);
if(result != 0)
return result;
result = ToDigit(d6);
if(result != 0)
return result;
result = ToDigit(d7);
if(result != 0)
return result;
result = ToDigit(d8);
if(result != 0)
return result;
return 0;
}
int ToDigit(char &d)
{
int i = 0;
for(i = 0; i < 8; i++)
{
if(static_cast<int>(d) < 48 || static_cast<int>(d) > 57)
{
switch(toupper(d))
{
case 'A': case 'B': case 'C':
d = '2';
break;
case 'D': case 'E': case'F':
d = '3';
break;
case 'G': case 'H': case 'I':
d = '4';
break;
case 'J': case 'K': case 'L':
d = '5';
break;
case 'M': case 'N': case 'O':
d = '6';
break;
case 'P': case 'Q': case 'R': case 'S':
d = '7';
break;
case 'T': case 'U': case 'V':
d = '8';
break;
case 'W': case 'X': case 'Y': case 'Z':
d = '9';
break;
case '-':
//skip, hyphen is OK
break;
default:
//error, invalid input
return -1;
}
}
}
return 0;
}
void AcknowledgeCall(char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8)
{
cout << "Phone Number Dialed: " << d1 << d2 << d3 << d4 << d5 << d6 << d7 << d8 << endl;
}