注册 登录
编程论坛 C++教室

怎么在输入的时候只输入一个类型

haibohere 发布于 2013-02-08 20:27, 456 次点击
我的意思是,比如输入只输入数字,如果键入其他的,例如、字母就报错但是不会终止输入,还可以继续输入数字
比如:我想输入567890 再输入的时候键入了5678y90也可以只是在输入y的时候给个错误声音提示但是不读入y。
6 回复
#2
TonyDeng2013-02-08 23:32
逐个字符读入,遇到不合法的字符就舍弃,把合法的拼到结果字符串中去,然后再转换成需要的数据类型。
#3
haibohere2013-02-09 12:22
回复 2楼 TonyDeng
能给个简单的例子吗,我才看不就c++好多函数都不清楚 。
#4
TonyDeng2013-02-09 12:35
你用什么环境编程?
#5
TonyDeng2013-02-09 12:47
程序代码:

#include <iostream>
#include <cctype>

int main(void)
{
    char str[80];
    char* p = str;
    int ch;

    printf_s("Please input a integer: ");
    while (((ch = getchar()) != EOF) && (ch != '\n'))
    {
        if (isdigit(ch))
        {
            *p++ = ch;
        }
        else
        {
            putchar(0x07);
        }
    }
    *p = '\0';
    printf_s("Your input is: %s\n", str);
    getchar();

    return 0;
}

注意:使用流输入机制,是不能即时检查按键内容的,必须按Enter之后才开始后面的处理流程,所以这里你只能先输入,回车后才能看到效果,不要每按一下就回车。即时检查按键的程序不能用getchar()函数,与你使用的平台有关。

这段代码其实就是gets()的原理,但你可以检查输入字符防止溢出,并增加各种检测逻辑。

[ 本帖最后由 TonyDeng 于 2013-2-9 13:20 编辑 ]
#6
TonyDeng2013-02-09 13:01
只要你看懂了我这个程序的逻辑,就可以处理任何数据类型的输入,因为最终只是要获得合法的字符串,就能向目标数据类型转换,那有各种各样现成的库函数可用,甚至可以自己写。一定要把人机交互的部分与数据处理分割开来,容错在交互部分做,不要到了数据处理阶段才来检查输入的合法性。这个做法,就是你将来写GUI时的基本思想,所有TextBox之类的输入控件,都是先得到字符串后再转换成所需数据类型的。
#7
haibohere2013-02-09 14:24
回复 4楼 TonyDeng
我用的vs1020
1