| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6059 人关注过本帖
标题:如何让程序只允许用户输入_数字_的问题!!!
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C也同樣不分int、char什麽的。

授人以渔,不授人以鱼。
2015-03-09 20:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>

const int K_ENTER = 0x0D;

int InputInteger(void);

int main(void)
{
    printf_s("\n%d\n", InputInteger());

    _getch();
    return EXIT_SUCCESS;
}

int InputInteger(void)
{
    char textBuffer[20];
    int ch, index = 0;

    do
    {
        ch = _getch();
        if (isdigit(ch) || ((index == 0) && (ch == '-')))
        {
            _putch(ch);
            textBuffer[index++] = ch;
        }
    } while ((index < sizeof(textBuffer) - 1) && (ch != K_ENTER));
    textBuffer[index] = '\0';

    return atoi(textBuffer);
}


授人以渔,不授人以鱼。
2015-03-09 21:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
12樓的InputInteger()函數,祇接收數値型按鍵,以及第一個按鍵可以是負號,按任何其他鍵均無反應,按回車確認輸入。這個代碼沒有檢測整數溢出情形,要檢測這個,請參閲標準庫手冊atoi()函數的文檔。

[ 本帖最后由 TonyDeng 于 2015-3-9 22:01 编辑 ]

授人以渔,不授人以鱼。
2015-03-09 21:56
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 13楼 TonyDeng
还有小数点也应包含进来

能编个毛线衣吗?
2015-03-09 22:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wmf2014在2015-3-9 22:00:54的发言:

还有小数点也应包含进来

整數哪來的小數點。Integer啊,整數。

授人以渔,不授人以鱼。
2015-03-09 22:02
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 15楼 TonyDeng
哦,我想复杂了

能编个毛线衣吗?
2015-03-09 22:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
明白這個原理,想寫接收什麽數據類型的函數都可以。即時檢測每個按鍵,比用流函數(gets()、scanf()、getchar()之類)在後期處理的用戶體驗好得多,那些函數後期檢測麻煩不精確不說,還把界面弄亂。

授人以渔,不授人以鱼。
2015-03-09 22:11
a861268448
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2014-9-15
收藏
得分:0 
回复 8楼 zklhp
你这个有点小问题,如果我输入的是222ddd,会显示222,而不是你看看你输入的破数的提示
2015-03-11 22:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用a861268448在2015-3-11 22:27:02的发言:

你这个有点小问题,如果我输入的是222ddd,会显示222,而不是你看看你输入的破数的提示


提的好 如果要改了可以这样

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

int main(void)
{
    char input[16] = {0};
    char tmp[16] = {0};
    int num = 0;
    printf("请输入数字:");
    scanf("%10s", input);
    if (sscanf(input, "%d", &num) != 1)
    {
        printf("你看看你输入的破数\n");
        return 0;
     }
    sprintf(tmp, "%d", num);
    if (strcmp(tmp, input))
    {
        printf("你看看你输入的破数\n"); /* Not identical. */
        return 0;
    }
   
    printf("你输入了%d\n", num);

    return 0;
}

2015-03-11 23:38
MrY
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-3-11
收藏
得分:0 
用戶輸入的內容是不是可以控制為int型為有效,其他類型自動清除后提示重新輸入?
2015-03-12 08:36
快速回复:如何让程序只允许用户输入_数字_的问题!!!
数据加载中...
 
   



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

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