我需要在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,意味着我可以获得无限的字符长度,那么我在哪里存储所有内容?
答案 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[]
数组的存储要求。如上所述,它每个数字使用一个字节。使程序每位只使用一位。