gpt4 book ai didi

c++ - 仅读取数字的 scanf 格式说明符

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

假设我的输入值是:

"2a", "6", "-20" "+20"

我想将以下值读入一个整数:

0, 6, -20, 20

我目前正在使用这行代码:

sscanf(input, "%d", &some_integer);

但它读取“2a”的整数值为 2 - 如何将“2a”读取为 0?

最佳答案

不过你可以这样做

#include <stdlib.h>
#include <stdio.h>

int
main()
{
char text[100];
int value;
int count;
char *endptr;

char source[] = "2a 6 -20 +20";
char *input;

input = source;
while (sscanf(input, "%99s%n", text, &count) == 1)
{
value = strtol(text, &endptr, 10);
if (*endptr != '\0')
value = 0;
input += count;

printf("%d ", value);
}
printf("\n");

return 0;
}
  1. 使用 sscanf()"%n" 说明符了解读取了多少个字符并推进指针以继续读取。
  2. 使用strtol()将读取的值转换为整数,当找到第一个不可转换的字符时转换停止,注意base参数非常很重要,因为 2A 是一个有效的十六进制数。
  3. 检查是否转换成功,如果转换的所有字符都满足,*endptr == '\0'
  4. 将指针推进到源字符串,并继续直到没有更多字符可供读取。

如果你只需要检查输入字符串是否是一个数字,这就是你应该使用的

int isdecimal(const char *const text)
{
char *endptr;
if (input == NULL)
return 0;
/* the 10 is to indicate that the number is in decimal representation */
strtol(text, &endptr, 10);
return (*endptr == '\0')
}

如果你只是想让值是0如果它不可转换,那么这就足够了

int convert(const char *const input)
{
int value;
char *endptr;

value = strtol(input, &endptr, 10);
if (*endptr != '\0')
value = 0;
return value;
}

关于c++ - 仅读取数字的 scanf 格式说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183761/

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