| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 892 人关注过本帖
标题:思考了许久 最后终于还是成功把这个程序写了出来
只看楼主 加入收藏
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
结帖率:90.91%
收藏
已结贴  问题点数:10 回复次数:12 
思考了许久 最后终于还是成功把这个程序写了出来
程序代码:
/* 数据检测程序(函数)
   这个程序 判断输入的数据中 是否全部为数值型数据
   如果全是 则返回 1
   如果不是 则返回 0
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
int _DATE_DET_();//数据检测函数
void main()
{
    char DATE[100];//数据定义
    int x;
    printf("请输入一串数据:");
    scanf("%s",DATE);
    printf("数据已检测!原数据\n");
    printf("%s\n",DATE);
    x=_DATE_DET_(DATE);
    printf("DATE=%d,属于%s数据\n",x,(x==0)? "非法" : "合法");
    system("pause");
}
/*    数据检测函数
      检测输入的数据中是有非数值成分
      通过返回值的方式 报告是否数据合法
      不合法 返回 0;
      合法   返回 1;
      从而确保用户输入数据的正确性以及程序的安全性
*/
int _DATE_DET_(char DATE[])
{
      int i=0,x,y;//初始化定义
      x=strlen(DATE);
    for(;i<x;i++){
         if(!isdigit(DATE[i])){
         y=0;
         break;//关键是这一句 发现非数值 立即报告 并退出循环;
     }
         else
         y=1;
  }
       return y;
}   
这个可以作为函数重复使用 一个小程序 见笑了 还请各位指出不足之处!
搜索更多相关主题的帖子: 检测 
2015-03-27 20:17
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
完成这个小功能哪要包含许多库,一个stdio足矣。
2015-03-28 08:17
lu3664198
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:55
专家分:185
注 册:2014-11-16
收藏
得分:0 
for (int a = 0;DATE[a] != '\0';a++) {
if (DATE[a] - '0' > 9) {

}
}
这样也可以,虽然我并没有去编译。不过,如果你需要数值,你可以直接用scanf %d,scanf会一直读取数字,直到遇到第一个非数字字符或者'\0'(如果第一个就不是数字,scanf就会返回非真值)。而在输入流缓冲区,剩下的第一个字符你可以用getchar读取来看看,或者可以用fflush(stdin)来清理缓冲区。

wwwwwww...~~;
本人为大一新生,说的不好不要拍我 ~ ( ̄~ ̄) ;
2015-03-28 09:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
自己能總結出那個關鍵點,非常好。最好再嘗試精簡一下代碼。

授人以渔,不授人以鱼。
2015-03-28 13:07
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
收藏
得分:0 
回复 2楼 xzlxzlxzl
真的么? 后面我还需要检测数据长度 不是还要用上 "string.h" 函数么 ?

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-03-28 13:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
以下是引用逍风在2015-3-28 13:08:21的发言:

真的么? 后面我还需要检测数据长度 不是还要用上 "string.h" 函数么 ?

不用,使用strlen()函數,實際上是做了一次多餘的循環。

授人以渔,不授人以鱼。
2015-03-28 13:10
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
收藏
得分:0 
回复 4楼 TonyDeng
很有道理! 这个设计的有点麻烦 回头我在想办法更简练  
   有一点我想说的是 能用简体中文么 有的我看不懂唉.

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-03-28 13:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
写这个函数,要紧扣C语言字符串的特点,它是以特定字符结束的,所以你只需一次循环,要么搜到不合法字符就结束,要么直至遇到结束字符才结束。如果你调用库函数strlen(),它是对字符串遍历了一次,需要找到那个结束字符,才能把结果返回给你,那趟循环对你现在的任务来说就是多余的,因为你可以把两个动作结合在一起做。

处理C字符串的一个惯例,是不要反复调用strlen(),比如for(i=0; i<strlen(s); ++i)这类代码,是需要回避的,让别人看见你这样写,会扣专业分。


[ 本帖最后由 TonyDeng 于 2015-3-28 13:28 编辑 ]

授人以渔,不授人以鱼。
2015-03-28 13:24
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:1 
for(i=0;p[i]!=0&&p[i]>47&&p[i]<58;i++);
这一句既判断字符串结束也判断是否为数字,如果是全数字,最后i会指向字符串结束位置的。
2015-03-28 13:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
不是所有编码方案的'0'都是47,ASCII“专业”观念该戒了。

授人以渔,不授人以鱼。
2015-03-28 13:37
快速回复:思考了许久 最后终于还是成功把这个程序写了出来
数据加载中...
 
   



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

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