提取号码并验证合法性,最好使用正则表达式,你这种判断方式只能判断填入的是否为数字、判断号码长度什么的 ,但是号码本身的数字规则等等都不能进行验证。比如你输入的号码,本身就是不正确的,不会有人用123-123456这种形式。
不过正则表达式有一些复杂,很难马上上手。
可以看看这里:http://www.2cto.com/kf/201110/107088.html
/* 检查电话合法性的代码 */
bool check_phone_num_correctness(const char* buffer)
{
const char* p = buffer;
for(; *p && (isdigit(*p) || *p == '-'); ++p);
return (*p == NULL) ? true : false;
}
bool get_phone_number(char* buffer, int max_size)
{
/* 使用一个更大的缓冲区保存输入, 如果字符串太长了, 不可以拷贝到你设定的 buffer[15]中 */
char big_buffer[1000];
printf("Please enter the engineer's telephone:");
scanf("%s", big_buffer);
int phone_size = strlen(big_buffer);
/* 判断是否合法, 1) 长度不超过buffer的长度 2) 字符内容符合电话号码要求(自己可以再扩展) */
bool is_size_correct = (phone_size > 0) && (phone_size < max_size);
if(!is_size_correct || !check_phone_num_correctness(big_buffer)) {
fprintf(stderr, "Error! please re-enter.\n");
return false;
}
/* copy back */
strcpy(buffer, big_buffer);
return true;
}
/* calling method */
char phone[15];
bool phone_correct = get_phone_number(phone, 15);
bool bRightPhone = false;
while(!bRightPhone)
{
printf("Please enter the engineer's telephone:");
scanf("%s",&Engineer->EngineerPhone);
bool bEveryRight = true;
if(sizeof(&Engineer->EngineerPhone) > 0 && sizeof(&Engineer->EngineerPhone) > 15)
{
for(x=0;x
{
if(((&Engineer->EngineerPhone < '0') && (&Engineer->EngineerPhone > '9')) && ((&Engineer->EngineerPhone) !='-'))
{
bEveryRight = false;
break;
}
}
}
else
{
bEveryRight = false;
}
bRightPhone = bEveryRight ;
if(!bRightPone)
{
printf("Wrong PhoneNumber,Again!\n");
}
}
电话格式有几种?如果就只有上面的格式,你只需要检查前三个和后6个是否为数字,第4个是否为'-'
不好意思,弄说错了