51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1364|回复: 19
打印 上一主题 下一主题

用C 编写一个输入INT数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-7-8 01:07:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求:
     输入的是一个INT数,则打印该数,输入的不是INT数,则要求重新输入~
     重点解决输入的是一个字符时的情况~~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2006-7-8 11:33:59 | 只看该作者
哎,是不是太简单了啊,都不值的大虾们回啊,自己顶啊~~~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2006-7-8 19:42:05 | 只看该作者
得到参数后sizeof一下与INT比较一下行不?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2006-7-8 22:34:16 | 只看该作者
三楼的可以解决。I think
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2006-7-9 11:09:56 | 只看该作者
舞の月 姐姐,好像是不行地,你要不编一下运行试试哈
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2006-7-9 12:45:07 | 只看该作者
声明:我是男D!
你把你写的程序发上来大家瞧瞧
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2006-7-9 14:01:11 | 只看该作者
#include<stdio.h>
void main()
{int n;
        printf("请输入您要数字:");
        while(scanf("%d", &n) ==0)
        {
                if ( scanf("%d", &n) != EOF )
                {
                while ( (n=getchar()) != '\n' && n != EOF ){} //如果用户输入的不是 EOF ,while循环会把输入缓冲中的残留字符清空
                }
                printf("请输入您要数字:");
        }
                printf("%d\n",n);                                                                                                                                                                                  
}
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2006-7-9 14:03:17 | 只看该作者
好象定义了 int x  x输入任何字符
sizeof (x)都是4
只能判断是不是整型  不能判断是不是整数
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2006-7-9 14:11:34 | 只看该作者
缓冲中的残留字符清空用
flushall();也可以 microsoft visual 6支持
但很多其他的编译器不支持flushall();
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2006-7-9 14:15:29 | 只看该作者
if ( scanf("%d", &n) != EOF )
这句是多没注意的说以前写拷上来了
^_^!
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2006-7-9 15:35:53 | 只看该作者
原帖由 firefox82 于 2006-7-9 14:01 发表
#include<stdio.h>
void main()
{int n;
        printf("请输入您要数字:");
        while(scanf("%d", &n) ==0)
        {
                if ( scanf("%d", &n) != EOF )
                {
                while ( ( ...

这个程序是可以,但还有一个问题就是它区分不开是整数和小数的,会取整的。
如同楼上所说的啊~
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2006-7-9 15:45:47 | 只看该作者
原帖由 舞の月 于 2006-7-9 12:45 发表
声明:我是男D!
你把你写的程序发上来大家瞧瞧


嘿嘿,不好意思O~Sorry啊
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2006-7-9 19:38:25 | 只看该作者
原帖由 zbyufeifei 于 2006-7-9 15:35 发表

这个程序是可以,但还有一个问题就是它区分不开是整数和小数的,会取整的。
如同楼上所说的啊~

这个程序不会死循环么?我怎么看怎么象个死循环
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2006-7-9 19:47:39 | 只看该作者
scanf("%d", &n)
这句一读出进就是整形了,不管输入的是什么数
以试试把传进来的数据定义成字符串形式然后判断一下输入有无小数点应该就行了吧`只不过输出的时候还是要以字符形输出,如果要一整形输出的话就应该也一个转化函数了吧~~理论上讲应该行的通
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2006-7-9 22:34:49 | 只看该作者
#include        <stdio.h>

#define        MAX_LENGTH        256

main()
{
        int i=0;
        char num[MAX_LENGTH];
        printf("\nPlease input the integer, end with enter key:\n");
        while(1)
        {
                num[i]=getche();
                if(0x0d==num[i])        /* num[i]='\r',input the end key.*/
                {
                        if(0==i)
                        {
                                printf("\nNone integer has been inputted,please input again:\n");
                                continue;
                        }
                        else
                        {
                                num[i]=0x00;        /* num[i]='\0',finish the input.*/
                                break;
                        }
                }
                else if(num[i]<0x30||num[i]>0x39)        /* num[i] not in 0~9 */
                {
                        printf("\nNot a integer! Please input again:\n");
                        i=0;   /*如果希望保留前面的数字,从出错的地方重新继续输入后面的数字,可将此语句去掉。*/
                        continue;
                }
                i++;
        }
        printf("\nThe integer you input is %s",num);
        sleep(5);
}

[[i] 本帖最后由 morn 于 2006-7-9 22:42 编辑 [/i]]
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2006-7-9 22:41:10 | 只看该作者
这是在输入的时候就进行判断的写法,如果要全部输入后再判断原理是一样的。

[ 本帖最后由 morn 于 2006-7-9 22:52 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2006-7-10 00:14:59 | 只看该作者
楼上正解~~嘿嘿~~我咋没想到挨个比较~~
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2006-7-16 11:50:10 | 只看该作者

-1?算不算int型

morn 的程序不错,从测试角度看,有个小漏洞。
-1?算不算int型?
   else if(num<0x30||num>0x39)        /* num not in 0~9 */
是否修改,加上首个输入考虑+ -;
首个输入可以带符号,另外一个问题是仅输入一个符号也要处理;
所以if(0x0d==num)内也要修改,加个0如何?
很久没编了,“+”,“-”的ascll值忘了;
试改如下:

#include        <stdio.h>

#define        MAX_LENGTH        256

main()
{
        int i=0;
        char num[MAX_LENGTH];
        printf("\nPlease input the integer, end with enter key:\n");
        while(1)
        {
                num=getche();
                if(0x0d==num)        /* num='\r',input the end key.*/
                {
                        if(0==i)
                        {
                                printf("\nNone integer has been inputted,please input again:\n");
                                continue;
                        }
                        else
                        {
                           //以下加一句
                            if([num[0]=="+"||num[0]=="-")
                                     if(1==i){num[1]=0;i++;}   
                            //继续   
                                num=0x00;        /* num='\0',finish the input.*/
                                break;
                        }
                }
                //  else if(num<0x30||num>0x39)        /* num not in 0~9 *
                //  改动如下
                else if((num<0x30||num>0x39)||num[0]!="+"||num[0]!="-"||(num[0]<0x30||num[0]>0x39))
                  /* num not in 0~9    num[0]not + ,-, 0~9 */

                {
                        printf("\nNot a integer! Please input again:\n");
                        i=0;   /*如果希望保留前面的数字,从出错的地方重新继续输入后面的数字,可将此语句去掉。*/
                        continue;
                }
                i++;
        }
   
        printf("\nThe integer you input is %s",num);
        sleep(5);
}
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2006-7-22 11:15:17 | 只看该作者
qiang
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2006-8-5 21:06:09 | 只看该作者

还有错

没注意‘0’  和0的差别
                         //以下加一句
                            if([num[0]=="+"||num[0]=="-")
                                     if(1==i){num[1]='0';i++;}   
                            //继续
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-18 20:35 , Processed in 0.074388 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表