| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5901 人关注过本帖
标题:为让用户输入规范的字符串
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 10楼 linlulu001
版主有一帖专门谈这个的,我还收藏了,居然忘了。
2016-09-01 18:30
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
int main()
{
    int m,i;
    int k=0;        //当作布尔变量用,记录‘@’是否存在
    int n=0;        //当作布尔变量用,记录‘.’是否存在
    int kk,nn;        //记录@和.出现的位置
    int kk1,nn1;    //记录@和.出现的次数
    char str[20],ch;
    printf("Please enter your new email: ");
   
   do{
        fflush(stdin);
       scanf (" %[0-9-A-Z-a-z@.^]", str);        //用这句输入,只能读取数字,字母和‘@’‘.’,出现范围以外的内容读取结束。
        m=strlen(str);
        kk=0;
        kk1=0;
    nn=0;
    nn1=0;
        for(i=0;i<m;i++)
        {
        ch=str[i];
        if(ch=='@')  { k=1;kk=i;kk1++;}        
        if(ch=='.')  { n=1;nn=i;nn1++;}
        }
        if(kk>nn||nn-kk==1||kk1!=1||nn1!=1)  {k=0;n=0;printf("输入的邮箱有误,请重新输入:\n");}   
        /*if(kk!=3||nn!=7||m-nn!=4||kk1!=1||nn1!=1)     {k=0;n=0;printf("输入的邮箱有误,请重新输入:\n");}
            确实是想输入这个格式***@***.***可以用这句来判断*/
    }while(!k&&!n);
    /*fp=fopen("管理员信息.txt","w+");
   
    fprintf(fp,"%s %s %s", administrator.ID, administrator.Password,administrator.email);
    fclose(fp);
    printf("Successful modification!");*/
            
}
2016-09-01 20:12
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 12楼 linlulu001
我个人还是觉得用三个%[]和"@"、“.”来读比较合适,至于说限制里面某个字段只有字母和数字,这是非常容易实现的。

分三个字段读数据有一个好处就是对于那些不满足*@*.*(*为不定长字符串)格式的错误地址,读数据的时候我就能够知道了,不用再进一步进行分析。

对于楼主提出每个字段都是有且只有3个字符,我想,分成三个字段读的话他也是会比较容易判定的。

图片附件: 游客没有浏览图片的权限,请 登录注册

scanf %[]  我个人也是没怎么用过,所以是临时又上网查了一下,就本题而言,这个是真的好用呢!(突然想起来我前面声明的字符串数组大小貌似太小了,如果需要使用此代码,请自行修正三个数组大小)
另外我写的程序也没有判断如果哪个字段的字符长度为1或2时的错误,while循环条件还有加上 ||strlen(UserName)!=3||strlen(ServerName)!=3||strlen(DomainName)!=3

这段代码还有没有更多的错误遗漏我就不清楚了。因为我不会想要深入去纠结,主要是为了展示出一种解决方式。



[此贴子已经被作者于2016-9-2 09:12编辑过]


φ(゜▽゜*)♪
2016-09-02 08:41
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
回复 8楼 linlulu001
linlulu001大神你好  下面红色字体代码我没看明白, if(n!=3),while(n!3),为什么判断条件一样?  
do{
          scanf ("%s", administrator.email);      
          m=strlen(administrator.email);
         n=0;
         for(i=0;i<m;i++)
         {
         ch=administrator.email[i];
         if(isalpha(ch)||isdigit(ch))  n++;      
         if(ch=='@'&&i==3&&n==3)  n=0;
         if(ch=='.'&&i==7&&n==3)  n=0;
         if(n>3)  break;
         }           
         if(n!=3)  printf("输入的邮箱有误,请重新输入:\n");     
     }while(n!=3);

早知做人那么辛苦!  当初不应该下凡
2016-09-19 00:25
快速回复:为让用户输入规范的字符串
数据加载中...
 
   



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

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