gpt4 book ai didi

c - 防止用户将负数传递给接受 unsigned int 的函数

转载 作者:太空狗 更新时间:2023-10-29 15:24:23 27 4
gpt4 key购买 nike

代码如下:

int create_mask(unsigned b, unsigned e)
{
unsigned int mask=1;

if(b<e || b<0 || e<0)
{
printf("Wrong values, starting bit can't be smaller than ending.\n");
printf("Both got to be >= 0.\n");
exit(EXIT_FAILURE);
}
while(b>0)
{
printf("%u\n", b);
mask<<=1;
if(b>e)
mask|=1;
b--;
}

return ~mask; /* negates mask for later purpose that is clearing corresponding bits */
}

函数为一些位操作创建掩码,但应该采用两个非负数的无符号整数 b 和 e。问题是如何防止用户输入负数?当使用 (-1,0) 调用函数时,它会启动循环,并应错误退出。

最佳答案

您可以只输入一个字符串,检查它是否包含 '-' 字符,如果包含则产生错误。否则,您将其转换为无符号整数并继续。 (读取字符串然后用 strtoul() 转换比使用 scanf() 更可取,特别是当你不知道 的所有怪癖时scanf().)

char buf[LINE_MAX];
fgets(buf, sizeof buf, stdin);

if (strchr(buf, '-') != NULL) {
fprintf(stderr, "input must be non-negative!\n");
exit(-1);
}

unsigned int n = strtoul(buf, NULL, 0);

关于c - 防止用户将负数传递给接受 unsigned int 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18574933/

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