CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

c程序的数据输入问题

楼主trackant(蚁迹寻踪)2002-10-09 18:36:11 在 C/C++ / C语言 提问

在tc编程里用scanf("%d,%d",&a,&b);,程序运行需要输入数据时,如果输入的格式不正确或者输入的数据类型不正确,比如输入字母,程序将出现严重的错误,应该如何避免这样的情况? 问题点数:30、回复次数:7Top

1 楼xiaott(我能睡觉吗)回复于 2002-10-09 18:42:18 得分 8

可以用:  
  if(a<='z'&&a>='a'||a<='Z'&&a>='A')  
  {printf("input   error!");return;}  
  这类语句Top

2 楼hechang(大豆)回复于 2002-10-09 19:17:43 得分 0

只要,没有错就可以  
  当你输入字母时也不会错,会按字母的ASC11Top

3 楼hechang(大豆)回复于 2002-10-09 19:28:02 得分 0

只要,没有错就可以  
  当你输入字母时也不会错,会按字母的ASC11  
  值输入   但只能输入一个号码并要按格式输入  
  要是不是数字可以这样  
  if(a<=-2.0e15||a>=2.0e16)  
  {printf("input   error!");return;}  
   
   
   
  Top

4 楼hechang(大豆)回复于 2002-10-09 19:29:04 得分 7

只要,没有错就可以  
  当你输入字母时也不会错,会按字母的ASC11  
  值输入   但只能输入一个号码并要按格式输入  
  要是不是数字可以这样  
  if(a<=-2.0e15||a>=2.0e16)  
  {printf("input   error!");return;}  
  Top

5 楼dyhong(dyh_december)回复于 2002-10-09 19:36:26 得分 4

写程序时,加的注释,也就是if(a<=-2.0e15||a>=2.0e16)  
  {printf("input   error!");return   这样的Top

6 楼stone112979(梦醒十分)回复于 2002-10-09 22:41:16 得分 3

up  
   
  加注释Top

7 楼MasterProgrammer(MasterSoft)回复于 2002-10-10 22:14:39 得分 8

对于这个问题有个比较笨的办法,就是自己控制输入,我常用的方法如下:  
  #include   <stdio.h>  
  #include   <conio.h>  
  #include   <math.h>  
  #include   <string.h>  
   
  const   unsigned   short   BACKSPACE   =   8;  
  const   unsigned   short   RETURN   =   13;  
  const   unsigned   short   ESC   =   27;  
   
  double   GetNumber(   void   );  
   
  void   main(   void   )  
  {  
        double   fOne,   fTwo;  
        printf("Input   frist   number:");  
        fOne   =   GetNumber();  
        printf("Input   second   number:");  
        fTwo   =   GetNumber();  
        printf("\nFirst   num   =   %f,   Second   num   =   %f\n",   fOne,   fTwo   );  
        return;  
  }  
   
  double   GetNumber(   void   )  
  {  
        double   fRetVal   =   0;  
        char   cTemp,   caTemp[128]   =   "";  
        unsigned   int   i   =   0,   j   =   1;  
        bool   bSymbol   =   false,   bPoint   =   false;  
        while(   (   cTemp   =   getch()   )   !=   RETURN   )  
        {  
              if(   '0'   <=   cTemp   &&   cTemp   <=   '9'   )  
              {  
                    putch(   cTemp   );  
                    caTemp[i++]   =   cTemp;  
                    caTemp[i]   =   '\0';  
                    continue;  
              }  
              switch(   cTemp   )  
              {  
              case   '.':  
                    if(   bPoint   ==   false   )  
                    {  
                          putch(   cTemp   );  
                          caTemp[i++]   =   cTemp;  
                          bPoint   =   true;  
                    }  
                    break;  
              case   '+':  
              case   '-':  
                          if(   bSymbol   ==   false   &&   i   ==   0   )  
                                putch(   cTemp   );  
                          if(   cTemp   ==   '-'   )  
                                bSymbol   =   true;  
                          break;  
              case   BACKSPACE:  
                          if(   i   ==   0   )  
                          {  
                                bPoint   =   false;  
                                bSymbol   =   false;  
                                break;  
                          }  
                          i--;  
                          if(   caTemp[i]   ==   '.'   )  
                          {  
                                bPoint   =   false;  
                                caTemp[i]   =   '\0';  
                                break;  
                          }  
                          caTemp[i]   =   '0';  
                          printf(   "\b   \b"   );  
                          break;  
              case   ESC:  
                    return   0;  
              default:  
                    break;  
              }  
              caTemp[i]   =   '\0';  
        }  
        bPoint   =   false;  
        for(   i   =   0;   i   <   strlen(   caTemp   );   i++   )  
        {  
              if(   caTemp[i]   ==   '.'   )  
              {  
                    bPoint   =   true;  
                    continue;  
              }  
              if(   bPoint   ==   false   )  
                    fRetVal   =   fRetVal   *   10   +   caTemp[i]   -   48;  
              else  
                    fRetVal   =   fRetVal   +   (caTemp[i]   -   48)   *   pow(   0.1,   j++   );  
        }  
        if(   bSymbol   ==   true   )  
              fRetVal   =   -1   *   fRetVal;  
        printf("\n");  
        return   fRetVal;  
  }  
  当输入数值时,只有按下Enter/Esc才返回值,并且只有按下数字键,+,-,.才有效.其中你可以控制输入的长度,如int的范围:-32768   -   32767,在输入的时候当i=4时(最大值9999)就返回值以确保其值有效.对于字符输入也是同样道理,其方法大致一样.(编译环境VC6)Top

相关问题

  • 求根据输入汉语得到拼音码的C#程序(不要带数据库的)
  • 在c/s应用程序中,如何动态连接Informix数据库并屏蔽用户名和密码输入的对话框?
  • 在程序中输入数据的问题?
  • 怎么在程序中输入数据库查询条件
  • 怎样在另一个程序窗体中输入数据
  • 谁有CGI程序用于分析标准输入的C++类?
  • c++程序怎样把结果输入到文件中?
  • 我想在C#控制台程序中输入一个数字!
  • 如何在C程序中输入一幅图片??
  • 数据输入

关键词

  • 字母
  • 数据
  • 输入
  • e16
  • fone
  • ftwo
  • getnumber
  • 程序
  • 不会错
  • 格式

得分解答快速导航

  • 帖主:trackant
  • xiaott
  • hechang
  • dyhong
  • stone112979
  • MasterProgrammer

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo