51Testing软件测试论坛

标题: 用C 编写一个输入INT数 [打印本页]

作者: zbyufeifei    时间: 2006-7-8 01:07
标题: 用C 编写一个输入INT数
要求:
     输入的是一个INT数,则打印该数,输入的不是INT数,则要求重新输入~
     重点解决输入的是一个字符时的情况~~~
作者: zbyufeifei    时间: 2006-7-8 11:33
哎,是不是太简单了啊,都不值的大虾们回啊,自己顶啊~~~~~~~
作者: 舞の月    时间: 2006-7-8 19:42
得到参数后sizeof一下与INT比较一下行不?
作者: yhzmw    时间: 2006-7-8 22:34
三楼的可以解决。I think
作者: zbyufeifei    时间: 2006-7-9 11:09
舞の月 姐姐,好像是不行地,你要不编一下运行试试哈
作者: 舞の月    时间: 2006-7-9 12:45
声明:我是男D!
你把你写的程序发上来大家瞧瞧
作者: 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 ( (n=getchar()) != '\n' && n != EOF ){} //如果用户输入的不是 EOF ,while循环会把输入缓冲中的残留字符清空
                }
                printf("请输入您要数字:");
        }
                printf("%d\n",n);                                                                                                                                                                                  
}
作者: firefox82    时间: 2006-7-9 14:03
好象定义了 int x  x输入任何字符
sizeof (x)都是4
只能判断是不是整型  不能判断是不是整数
作者: firefox82    时间: 2006-7-9 14:11
缓冲中的残留字符清空用
flushall();也可以 microsoft visual 6支持
但很多其他的编译器不支持flushall();
作者: firefox82    时间: 2006-7-9 14:15
if ( scanf("%d", &n) != EOF )
这句是多没注意的说以前写拷上来了
^_^!
作者: zbyufeifei    时间: 2006-7-9 15:35
原帖由 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 ( ( ...

这个程序是可以,但还有一个问题就是它区分不开是整数和小数的,会取整的。
如同楼上所说的啊~
作者: zbyufeifei    时间: 2006-7-9 15:45
原帖由 舞の月 于 2006-7-9 12:45 发表
声明:我是男D!
你把你写的程序发上来大家瞧瞧


嘿嘿,不好意思O~Sorry啊
作者: 舞の月    时间: 2006-7-9 19:38
原帖由 zbyufeifei 于 2006-7-9 15:35 发表

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

这个程序不会死循环么?我怎么看怎么象个死循环
作者: 舞の月    时间: 2006-7-9 19:47
scanf("%d", &n)
这句一读出进就是整形了,不管输入的是什么数
以试试把传进来的数据定义成字符串形式然后判断一下输入有无小数点应该就行了吧`只不过输出的时候还是要以字符形输出,如果要一整形输出的话就应该也一个转化函数了吧~~理论上讲应该行的通
作者: morn    时间: 2006-7-9 22:34
#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]]
作者: morn    时间: 2006-7-9 22:41
这是在输入的时候就进行判断的写法,如果要全部输入后再判断原理是一样的。

[ 本帖最后由 morn 于 2006-7-9 22:52 编辑 ]
作者: 舞の月    时间: 2006-7-10 00:14
楼上正解~~嘿嘿~~我咋没想到挨个比较~~
作者: lxm    时间: 2006-7-16 11:50
标题: -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);
}
作者: dugaoyun    时间: 2006-7-22 11:15
qiang
作者: lxm    时间: 2006-8-5 21:06
标题: 还有错
没注意‘0’  和0的差别
                         //以下加一句
                            if([num[0]=="+"||num[0]=="-")
                                     if(1==i){num[1]='0';i++;}   
                            //继续




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2