验证无限输入char \ number

时间:2015-08-30 07:20:32

标签: c

我需要在0到9之间从用户那里获得一个有效的数字而不重复。 有效数字可以包含任意数字,从1到10。 如果用户键入“space”或任何类型的char,则输入无效。 我的算法:

1)创建一个大小为10的char数组,然后将所有单元格初始化为“0”。

2)对于从用户读取的每个char,检查char是否实际在0-9之间。

2.1)如果为true:分别计算+1的单元格数。

2.2)否则“错误”。

2.3)如果我到达已经有+1的单元格,意味着这个数字已经存在,那么“错误”。

现在有几个关于我的想法的问题:

1)有没有更好的\ easy算法呢?

2)用户没有按字母键入char,意味着我可以获得无限的字符长度,那么我在哪里存储所有内容?

1 个答案:

答案 0 :(得分:1)

2)的答案是:你根本不存储字符,你逐个处理它们。您只需要存储即可记住您已经看过哪些数字。我会这样做:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char seen[10] = { 0 };
    int c, loops;

    for (loops = 0; (c = getchar()) != EOF && loops < 10; ++loops)
    {
        if (!isdigit(c)) {
           printf ("Not a digit: %c\n", c);
           break;
        }
        c -= '0';
        if (seen[c]) {
           printf ("Already seen: %d\n", c);
           break;
        }
        seen[c] = 1;
    }

    return 0;
}

尝试将此程序修改为练习:减少seen[]数组的存储要求。如上所述,它每个数字使用一个字节。使程序每位只使用一位。