输入一行字符表示车牌号码,五位,只允许是0~9数字或大写英文字母,至少一位数字。
以下几种情况输出“非法输入”:
输入超过五位字符;
没有出现数字;
3)出现其他字符。
若最后一个出现的数字为奇数,输出“限行” ;否则输出“通行” 。
仅供参考!谢谢!
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(int argc, char *argv[])
{
char s[128];
int n, len, flag;
scanf("%s", s);
len = strlen(s);
n = strcspn(s, "0123456789");
flag = strspn(s, "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890");
if (len > 5 || len == n)
puts("非法输入!");
else if (flag == len && len == 5 && ((n > 0 && n < len)||isdigit(s[0])))
{
if (isdigit(s[4]) && s[4] % 2 != 0)
puts("限行!");
else
puts("通行!");
}
else
puts("输入无效!");
return 0;
}
可以用一个字符数组存储从输入获取的一个车牌号码字符串,然后遍历这个字符数组,依次判断题目要求的各个要求是否满足,然后打印相应的提示信息即可,下面是一个实现,供参考:
参考链接:
#include <stdio.h>
#include <string.h> //为strlen()函数提供函数原型
int main(void){
char number[10];
printf("请输入一个车牌号码(五位):");
gets(number);
//车牌号码超过五位字符
if(strlen(number)>5){
printf("非法输入");
return 0;
}
int nums=0,i=0;
while(number[i]!='\0'&&i<5){
// https://www.cnblogs.com/HZL2017/p/15113755.html
// https://www.runoob.com/w3cnote/ascii.html
//计算数字的个数
if(number[i]>='0'&&number[i]<='9'){
nums++;
}
//出现数字或字母=之外的其他字符
if(number[i]<'0'||(number[i]>'9'&&number[i]<'A')||(number[i]>'Z'&&number[i]<'a')||number[i]>'z'){
printf("非法输入");
return 0;
}
i++;
}
//数字的个数为0
if(nums==0){
printf("非法输入");
return 0;
}
int lastNumber=number[4]-'0';
if((number[4]>='0'&&number[4]<='9')&&lastNumber%2!=0){ //车牌号码最后一位为奇数,输出“限行”
printf("限行");
} else{ //否则输出“通行”
printf("通行");
}
return 0;
}