一开始写的:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define LENGTH 13
int verifyMsisdn(char *inMsisdn)
{
int i,count=0;
for(i=0;i<13;i++)
{
if(inMsisdn[i]!='\0')
count++;
}
if(count!=13)
return 1;
if(inMsisdn[0]!='8'||inMsisdn[1]!='6')
return 3;
for(i=0;i<13;i++)
{
if(inMsisdn[i]>'9'||inMsisdn[i]<'0')
return 2;
}
return 0;
}
int main()
{
char *pchar=NULL;
int result;
unsigned char ichar=2;
//printf("%c\n",ichar);
switch (ichar)
{
case 0:
pchar="86123456789";
break;
case 1:
pchar="8611111111111";
break;
case 2:
pchar="86s1234567890";
break;
default:
break;
}
result=verifyMsisdn(pchar);
printf("result is %d\n",result);
}
后来又写了一个,感觉简洁多了,而且让我知道,程序遇到return之后就会给主调函数返回值,后面的程序就不会执行了。
#include <stdio.h>
#include <string.h>
int verifyMsisdn(char *num)
{
int i;
if (strlen(num)!=13)
return 1;
for (i=0;i<13;i++)
{
if (num[i]<'0' ||num[i]>'9')
return 2;
}
if(num[0]!='8' || num[1]!='6')
return 3;
return 0;
}
void main()
{
int i;
char id[20];
printf("please input a phone number:\n");
scanf("%s",id);
i=verifyMsisdn(id);
printf("%d\n",i);
}
别人的答案:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define LENGTH 13
int verifyMsisdn(char *inMsisdn)
{
char *pchar=NULL;
assert(inMsisdn!=NULL);
if(LENGTH==strlen(inMsisdn))
{
if(('8'==*inMsisdn)&&('6'==*(inMsisdn+1)))
{
while(*inMsisdn!='\0')
{
if(*inMsisdn>='0'&&*inMsisdn<='9')
inMsisdn++;
else
retutn 2;
}
}
else
return 3;
}
else
return 1;
return 0;
}
int main()
{
char *pchar=NULL;
int result;
unsigned char ichar=2;
//printf("%c\n",ichar);
switch (ichar)
{
case 0:
pchar="86123456789";
break;
case 1:
pchar="8611111111111";
break;
case 2:
pchar="86s1234567890";
break;
default:
break;
}
result=verifyMsisdn(pchar);
printf("result is %d\n",result);