| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3608 人关注过本帖
标题:关于检查输入不合法的问题,请大牛们赐教
取消只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:20 回复次数:9 
关于检查输入不合法的问题,请大牛们赐教
一个程序的健壮性测试,用户随意输入值程序不出错就达到了目地。第一份代码是用字符串处理,可以完整的控制用户的所有输入不合法的情况。第二份代码是用输出流控制。但是不管怎么处理也没有字符串处理的好。比如输入1.0,+1,1+这些值的话还输会判定为合法的输入。因为scanf返回值会有0,和1。

我想知道不用字符串能完整处理好输入数字的方式。假如一个结构体有int float double char,各种类型的话。都用字符串处理的话那好麻烦,而且全是char型感觉也不美观,那不然其他类型的常量还有啥用呢?请大牛赐教!!!


代码1:
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main ()
{
    char str[100];
    while(1)
    {
        gets(str);
        if(strlen(str) ==1  && str[0] >= 49 && str[0] <= 57 && str[0] != '.')
        {
            printf("输入合法\n");
            //putchar(str[0]);
            int c = atoi(str);
            printf("%d\n", c);
        }
        else
        {
            printf("input error! iNput again\n");
        }
    }
}


代码2:
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a, b, c;
    while(1)
    {
    c = scanf("%d", &a);
    printf("%d  ", c);
    if (c == 1 &&c != 0 )
    {
        printf("YES\n");
        fflush(stdin);
    }
    else
    {
        fflush(stdin);
        printf("error!\n");
        continue;
    }
    }
}
搜索更多相关主题的帖子: 而且 字符串 结构体 double 
2017-04-07 11:32
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 rjsp
我想写个链表。处理用户不合法的输入导致程序出错的问题。求指教
2017-04-07 12:31
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
是这样的。只有用字符串处理?还有就是姓名,学号,成绩等。用户随意输入也会导致程序出错。难道只有全部用字符串输入,再转整形浮点型?
2017-04-07 12:59
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 6楼 renkejun1942
不用系统输入函数,拿别人的写的软件怎么处理。
2017-04-07 14:01
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 8楼 grmmylbs
大神有没有实例学习。
2017-04-07 14:07
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 7楼 rjsp
scanf怎么来处理?假如输入是个int型。用户随意输入字符就会导致程序,不会读入输入内容。我想实现的就是用户输入必须是定义的int型、float这些类型。输入其他类型让用户重新输入,满足条件就接收输入
2017-04-07 14:36
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 13楼 rjsp
假如输入一个数字,其它字符。在循环里面他会返回1 和0。也就是说1., 1* ,1/这些都会判定为1的
2017-04-07 16:39
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 14楼 九转星河
难道只有字符串或者正则才能完全处理好。9版?
2017-04-07 16:40
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 17楼 九转星河
代码第二种就是用的换回值。数字和字符的话。  加入1&#:#这样输会返回1 0的。不是同时返回,一次返回一个。:&/&1也是会返回两个0  1
2017-04-07 16:52
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 20楼 烟雨晨曦
又见大神,只要你回帖就是经典。没了解过sscanf函数。⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄羞羞
难道我眼花了,把scanf 看成sscanf

[此贴子已经被作者于2017-4-7 17:27编辑过]

2017-04-07 17:26
快速回复:关于检查输入不合法的问题,请大牛们赐教
数据加载中...
 
   



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

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