gpt4 book ai didi

c - 扫描用户输入的位

转载 作者:太空狗 更新时间:2023-10-29 17:26:05 24 4
gpt4 key购买 nike

我想知道什么是扫描输入的最佳方式..让我们说来自用户的 16 位。(exp:[0 1 0 0 1 1 0 ...])我将为此使用 short int。

假设每个位都代表某种属性。我希望用户能够通过两种方式给我输入(位的一些排列):

第一种方式:所有16位都用0初始化,用户将他想要打开的位的位置给我:

short int a=0; (look like [000000....0])

lets say user choose 3, 5

所以,我知道我可以制作一个用零初始化的掩码,除了请求的位置(这将是 1),如下所示:

short int mask=0x1;mask<<=3;

a|=mask;

然后用代表第五位的掩码做同样的事情。但是有没有更好的方法来做到这一点?

第二个问题是,假设我想从用户那里扫描代表所请求排列的字符串。 (exp: 01101010100..)我该怎么做?syntex 在这里对我很重要.. 我应该在 scanf 中写什么?等等非常感谢。

最佳答案

由于 2 个输入的语法不同,因此允许两者。

// pseudo code
fgets(buffer,...);
if (IsSyntax1(buffer)) {
a = ProcesssPerSyntax1(buffer, a);
else if (IsSyntax2(buffer)) {
a = ProcesssPerSyntax2(buffer, a);
else Error();

示例语法解析器

char *endptr;
// looking for 16-digit binary number
unsigned long tmp = strtoul(buffer, &endptr, 2);
if (endptr == &buffer[16] && *endptr == '\n') {
a = (short) tmp;
}
else {
// Search for comma separated 0-15 offsets
char *p = buffer;
unsigned mask = 0;
do {
unsigned long index = strtoul(p, &endptr, 10);
if (index >= 16) return fail;
if ((*endptr != ',') && (*endptr != '\n')) return fail;
if (endptr == p) return fail;
mask |= 1U << (unsigned) index;
p = endptr + 1;
} while (*endptr == ',');
a = mask;
}

[编辑]
应使用 strtoul() 与 strtol() 来处理 16 位 int/unsigned,正如@BLUEPIXY 评论所暗示的那样。

关于c - 扫描用户输入的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com