验证无限输入char number

  • 本文关键字:char number 无限 验证
  • 更新时间 :
  • 英文 :


我需要从0-9之间的用户获得一个有效的号码,没有重复。有效号码可以是1到10之间的任意数字。如果用户键入"空格"或任何类型的字符,则输入无效。我的算法:

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

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

2.1)如果为真:分别计算细胞数+1。

2.2) Else "error"。

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

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

1)有没有更好的算法?

2)用户不输入一个字符一个字符,这意味着我可以得到一个无限的字符长度,那么我在哪里存储所有的东西?

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: %cn", c);
           break;
        }
        c -= '0';
        if (seen[c]) {
           printf ("Already seen: %dn", c);
           break;
        }
        seen[c] = 1;
    }
    return 0;
}

尝试修改这个程序作为练习:减少seen[]数组的存储需求。写入时,每个数字使用一个字节。

最新更新