gpt4 book ai didi

c - 如何验证用户输入的数字实际上是 c 中的有效 unsigned int

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:21 25 4
gpt4 key购买 nike

我正在用 c 语言编写一个程序,该程序在命令行上接收来自用户的参数,但该参数必须是有效的无符号整数。例如,如果用户输入值 -1,那么我将不得不打印一个错误代码。或者如果用户输入任何大于 4294967295 的值,那么我也会打印一个错误代码。

我不确定如何检查他们的输入是否在正确的范围内(0 和 4294967295)。

最佳答案

to verify that user input number is in fact a valid unsigned int in c

strtoul() 是正确的函数。它在接受 '-' 时会带来一些问题。让我们假设前导空格没问题,然后手动检查字符串的前端。

// 0: invalid, 1: valid
int unsigned_int_valid(const char *s) {

while (isspace((unsigned char) *s) s++;
// Fail on '-' as any negative number is out of range.
if (*s == '-') return 0; // Could add code to allow "-0"
if (*s == '+') s++;
if (!isdigit((unsigned char) *s) return 0;
// Code knowns string begins with a digit

errno = 0; // Clear this global value as code tests it later.
char *endptr; // Pointer where parsing stopped.
unsigned long ul = strtoul(s, &endptr, 0);

// Usually this test is needed to see if _any_ conversion happened,
// but code knowns the first character is a digit.
#if 0
if (s == endptr) return 0;
#endif

// Could march down the end of the string allowing trailing white-space
while (isspace((unsigned char) *endptr) endptr++;

// Extra text after the digits?
if (*endptr) return 0;

// Overflow? strtoul sets `errno = ERANGE` when "outside the range" of unsigned long
if (errno) return 0;

#if ULONG_MAX > UINT_MAX
// Does 'ul` value exceeds `unsigned` range?
if (ul > UINT_MAX) return 0;
#endif

return 1;
}

关于c - 如何验证用户输入的数字实际上是 c 中的有效 unsigned int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32600232/

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