| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2123 人关注过本帖
标题:封装控制输入
只看楼主 加入收藏
属性
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
封装控制输入
封装控制输入
/*******************************************************************
    名称:允许输入字母和数字的函数
    参数:
acStr    表示: 保存的数组
        iMaxLen表示: 最大输入字符数
        iPutType表示:
            0 (无控制)  1(只能输入数字)  2(只能输入字母)
            3 (只能输入数字和字母)
        isPlaintext表示是否显示明文 1表示明文
 ****************************************************************/
int glb_putString(char acStr[100], int iMaxLen, int iPutType, int isPlaintext)
测试:参考点菜机项目手册的登录功能,实现用户名和密码的控制输入(用户名要求明文、最长8位、只可数字和字母组成,密码要求暗文及*号显示、最长6位、只可数字组成)。如输入的用户名为admin,密码为123456则提示登录成功,否则提示登录失败。
不需要注册,用户名就为admin,密码123456,
求帮忙
搜索更多相关主题的帖子: 控制 输入 数字 表示 用户名 
2017-07-09 10:56
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
字符串匹配问题可以查查正则表达式~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-09 13:55
属性
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-9
收藏
得分:0 
回复 2楼 九转星河
不懂。这个不是要用数组做吗
2017-07-09 14:54
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:15 
不会用正则,用简单的if else完成的。
#include <stdio.h>
#include <conio.h>
int glb_putString(char acStr[100], int iMaxLen, int iPutType, int isPlaintext)
{
    char a,i=0;
    if(isPlaintext)
    {
        while((a=getch())!=13)
        {
            if(iPutType==1)
            {
            
            
                if(a>='0'&&a<='9')
                {
                    acStr[i++]=a;
                    putchar(a);
                }
            
            }
            else if(iPutType==2)
            {
                if(a>='A'&&a<='z')
                {
                    acStr[i++]=a;
                    putchar(a);
                }
            }
            else if(iPutType==3)
            {
                if(a>='A'&&a<='z'||a>='0'&&a<='9')
                {
                    acStr[i++]=a;
                    putchar(a);
                }
            }
        }        
    }
    else if(!isPlaintext)
    {
        while((a=getch())!=13)
        {
            if(iPutType==1)
            {
            
            
                if(a>='0'&&a<='9')
                {
                    acStr[i++]=a;
                    putchar('*');
                }
            
            }
            else if(iPutType==2)
            {
                if(a>='A'&&a<='z')
                {
                    acStr[i++]=a;
                    putchar('*');
                }
            }
            else if(iPutType==3)
            {
                if(a>='A'&&a<='z'||a>='0'&&a<='9')
                {
                    acStr[i++]=a;
                    putchar('*');
                }
            }
        }        
    }        
    return i;
}

main()
{
    char acStr[100];
    int len;
    len=glb_putString(acStr,100,3,0);
    acStr[len]='\0';
    printf("\n%s",acStr);
}

[此贴子已经被作者于2017-7-9 15:57编辑过]

2017-07-09 15:54
属性
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-7-9
收藏
得分:0 
回复 4楼 ehszt
这样不能控制输入几位数啊
2017-07-09 16:34
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 5楼 属性
i是用来计数的,可以在外循环里加个条件当大于最大值时退出。
2017-07-09 18:36
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:5 
程序代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
   char  *str;
    int conType,maxLen,showType;
   int contr(int conType,int maxLen,int showType,char *str);
     printf("键入控制类别:");
    scanf("%d",&conType);
    printf("\n");
    printf("是否显示:");
    scanf("%d",&showType);
    printf("\n");
    printf("键入密码长度:");
    scanf("%d",&maxLen);
    printf("\n");
str=(char*)malloc(maxLen+1);

    while(1) 
    {
        contr(conType, maxLen, showType,str);
        printf("\n ok : %s \n",str);
    }
free(str);
    return -1;
}

int contr(int conType,int maxLen,int showType,char *str)
{
    int    flgTable[][3]=
    {
        {1,1,1},
        {1,0,0},
        {0,1,0},
        {1,1,0}
    };
    char ch;
    int charType,len;
    len=0;
    while(len<maxLen)
    {
         ch=getch();
         if(ch>='0' && ch<='9')  charType=0;
         else if (ch>='a' && ch<='z' || ch>='A' && ch<='Z')  charType=1 ;
         else  charType=2;

        if( flgTable[conType][charType]  )
        {
             str[len]=ch;
             putch(ch*showType+'*'  * (showType^1));
            ++len;
        }
    }

   str[len]='\0';

    return -1;
}
2017-07-10 11:15
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 7楼 jklqwe111
看了你的贴子我把原来程序修改了一下,少了好多行,谢谢你啊。
#include <stdio.h>
#include <conio.h>
 int glb_putString(char acStr[100], int iMaxLen, int iPutType, int isPlaintext)
 {
     char a,i=0;
     char flag;
         while((a=getch())!=13)
         {
                 flag=0;
                 if(i<iMaxLen)
                 {
                     switch(iPutType)
                    {
                    case 0:  {acStr[i++]=a;flag=a;}break;
                    case 1:  if(a>='0'&&a<='9'){acStr[i++]=a;flag=a;}break;
                    case 2:  if(a>='A'&&a<='z'){acStr[i++]=a;flag=a;}break;
                    case 3:  if(a>='A'&&a<='z'||a>='0'&&a<='9'){acStr[i++]=a;flag=a;}break;
                    default: break;   
                    }
                    if(flag)   
                    putchar(a*isPlaintext+'*'*((~isPlaintext)&1));
                }
        }   
     return i;
 }

 main()
 {
     char acStr[100];
     int len;
     len=glb_putString(acStr,10,3,1);
     acStr[len]='\0';
     printf("\n%s",acStr);
 }
2017-07-10 12:48
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <conio.h>

int glb_putString(char acStr[100], int iMaxLen, int iPutType, int isPlaintext)
{
    int i = 0;
    char c = '0';
    bool IsValid = false;
    while(i < iMaxLen && (c = getch()) != '\0')
    {
        IsValid = false;
        switch (iPutType)
        {
        case 1:
            IsValid = (c >= '0' && c <= '9') ? true:false;
            break;
        case 2:
            IsValid = (c >= 'A' && c <= 'z') ? true:false;
            break;
        case 3:
            IsValid = ((c > '0' && c <= '9')||(c >= 'A' && c <= 'z')) ? true:false;
            break;
        default:
            IsValid = true;
            break;
        }
        if(IsValid){
            acStr[i++] = c;
        }else{
            printf("不合法输入\n");
            return iPutType;
        }
    }
    acStr[iMaxLen] = '\0';
    if(isPlaintext == 1){
        printf("value:%s\n", acStr);
    }else{
        printf("value:******\n");
    }
}

int main()
{
    char acStr[100] = "";
    glb_putString(acStr, 6, 1, 1);
    return 0;
}


[此贴子已经被作者于2017-7-10 22:49编辑过]

2017-07-10 22:46
爱摩卡的猫
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-11-7
收藏
得分:0 
#include<stdio.h>
#include<conio.h>
int glb_putString(char acStr[100], int iMaxLen, int iPutType, int isPlaintext)
{
int i=0;
char ch='0';
    while(i<iMaxLen&&(ch=getch())!='/0')
    {   
        switch(iPutType)
        { case 0: {acStr[i++]=ch;}break;
            case 1: if(ch>='0'&&ch<='9') {acStr[i++]=ch;}break;
              case 2: if(ch>='A'&&ch<='z') {acStr[i++]=ch;}break;
                 case 3:  if(ch>='0'&&ch<='9'||ch>='A'&&ch<='z') {acStr[i++]=ch;}break;
                   default : break;
        }
        if(1==isPlaintext)
        {  
            putchar(ch);
        }
        if(0==isPlaintext)
        {
            putchar('*');
        }
      
    }

  return i;
}
2018-11-07 20:19
快速回复:封装控制输入
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020174 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved