上机题,检测电话号码

一开始写的:


#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);


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值