I'm working on a problem which calls for masking out certain parts of the digits being read in. My Code is below. I got the problem correct, but I couldn't shake the feeling that there was a better way to deal with the last mask (noted in comments as problematic).

#include <iostream>
#include <iomanip>
using namespace std;
#include <conio.h>

struct phone_num
{
int a_code;
int prefix;
int postfix;
};


int main(int argc, char* argv)
{
	
	phone_num num1={111, 222, 3333};
	phone_num num2;
	char ch='a';
	cout << setprecision(10);
	cout << "Enter phone number:";
	double total=0;
	double temp=0;
	do
	{
	ch=getche();
	if( (ch-48) >= 0 && (ch-48) <= 9)
		total=total*10+(ch-48);
	}while( ch != '\r');

	temp = static_cast<int>(total/10000);  // sets temp variable to mask out first 7 digits
	num2.postfix = (total-(temp*10000)); 
	
	temp = static_cast<int>(total/10000000);  // masks last 7 digits to get area code
	num2.a_code = temp;
	
	
	temp = (total - (static_cast<double>(num2.a_code)*10000000));  // problematic part masks last 4 and first 3 digits leaving prefix
	system("cls");
		num2.prefix = static_cast<int>(temp/10000);
	
	cout << "(" << num2.a_code << ")" << num2.prefix << "-" << num2.postfix << endl;
	system("PAUSE");
return 0;
}

>>if( (ch-48) >= 0 && (ch-48) <= 9)

replace that with: if( isdigit(ch) )

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.