我正在尝试找到在C语言中读取正整数的最有效方法。我不能仅使用scanf("%u", &var),因为scanf会对负数取二进制补码,从而破坏这个数字。我也不想手动将字符读入缓冲区,因为这需要我提前知道最大位数,而实际上我只希望受到UINT_MAX的限制。
有什么建议或者我可能忽略的东西吗?
有什么建议或者我可能忽略的东西吗?
可能是这样的:
char sign = getchar();
if ('-' == sign) {
//error
} else {
ungetchar(sign);
scanf("%u", &var)
}
ungetc(sign, stdin)
函数。 - user786653char ch; while ((ch = getc(stdin)) == ' ' || ch == '\f' || ch == '\t' || ch == '\v' || ch == '\n' || ch == '\r'); if (ch != '-'){ungetc(ch, stdin);scanf("%u", &var);}
以确保空格不会引起问题。 - Adam M-Wwhile (isspace(ch = fgetc(stdin)));
?这个处理的字符和你代码中一样,还可以处理“奇怪”的语言环境中可用的其他内容,而且更容易看。 - pmg关于从用户读取一个有符号整数,如果它是负数,则向用户显示错误信息:
int var;
scanf("%d", &var);
if (var < 0) {
printf("Error: %d is negative", var);
}
else {
/* use the positive number */
unsigned int positive = var;
/* ... */
}