| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6059 人关注过本帖
标题:如何让程序只允许用户输入_数字_的问题!!!
只看楼主 加入收藏
a861268448
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2014-9-15
收藏
得分:0 
回复 19楼 zklhp
图片附件: 游客没有浏览图片的权限,请 登录注册

这是为什么
2015-03-12 20:35
a861268448
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2014-9-15
收藏
得分:0 
回复 12楼 TonyDeng
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';

可以说下这段是什么意思吗?
2015-03-12 20:42
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用a861268448在2015-3-12 20:35:36的发言:

 
这是为什么

输入的数特别大 也按输出错误处理

因为int放不了特别大的数
2015-03-12 21:45
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
胡乱写一个了

很不完善
没有极限值检验
输入有误就取预设值

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

#define VALINT -20150312
#define VALDOUBLE -20.150312
#define INTLEN 10
#define DOUBLELEN 16

void getInt(int *n) {
    int ch, count = 0;
    char num[INTLEN + 1] = {0};
    char *end, *p = num;

    if(ch = getchar(), isdigit(ch) ||
            ch == '-' || ch == '+') {
        sprintf(p, "%c", ch);
        count++;

        while((ch = getchar()) != '\n' && count < INTLEN) {
            if(isdigit(ch)) {
                sprintf(++p, "%c", ch);
                count++;

            } else {
                fflush(stdin);
                *n = VALINT;
                return;
            }
        }

    } else {
        fflush(stdin);
        *n = VALINT;
        return;
    }

    fflush(stdin);
    *n = strtol(num, &end, 10);
}

void getDouble(double *n) {
    int ch, flag = 0, count = 0;
    char num[DOUBLELEN + 1] = {0};
    char *end, *p = num;

    if(ch = getchar(),
            ch == '-' || ch == '+' ||
            ch == '.' || isdigit(ch)) {
        sprintf(p, "%c", ch);
        count++;

        if(ch == '.') flag++;

        while((ch = getchar()) != '\n' && count < DOUBLELEN) {
            if(ch == '.') {
                flag++;

                if(flag > 1) {
                    fflush(stdin);
                    *n = VALDOUBLE;
                    return;

                } else {
                    sprintf(++p, "%c", ch);
                    count++;
                }

            } else if(isdigit(ch)) {
                sprintf(++p, "%c", ch);
                count++;

            } else {
                fflush(stdin);
                *n = VALDOUBLE;
                return;
            }
        }

    } else {
        fflush(stdin);
        *n = VALDOUBLE;
        return;
    }

    fflush(stdin);
    *n = strtod(num, &end);
}

int main(void) {
    int x = 0;
    double y = 0;
    puts("输入一个整形数 x\n"
         "回车换行后再输入一个浮点数 y\n"
         "x 与 y 都为预设值时退出");

    do {
        getInt(&x);
        getDouble(&y);
        printf("x = %d\ty = %f\n", x, y);
    } while(x != VALINT || y != VALDOUBLE);

    return 0;
}


Only the Code Tells the Truth             K.I.S.S
2015-03-12 22:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 22楼 a861268448
先自己尝试理解一下

授人以渔,不授人以鱼。
2015-03-12 22:02
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
收藏
得分:0 
for(i = 1; i<= 9; i++)
    {
        for(j = 1; j <= i; j++)
        {
            k = j*i;
            printf("%d*%d=%-2d ",j,i,k);
        }
        printf("\n");
    }
    return 0;
}

 之前 我也写过这个程序 我把for(j=1;j<=i;j++) 写成了 for(j=1;j<=9;j++) 就是这一个细节  始终达不到想要的效果 后来找到了方法 ! 细节 真的很重要 学习了 .

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-03-13 15:37
快速回复:如何让程序只允许用户输入_数字_的问题!!!
数据加载中...
 
   



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

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