C 我如何知道用户给出的数字是整数还是双精度?
我们在课堂上有一个问题:我们应该从用户那里得到一个数字(scanf),我们应该检查它是整数还是双数 如果是double,我们应该写“double”,如果是整数,我们应该写“integer” 如何检查它是整数还是双精度?当然,我们可以使用if/else。C 我如何知道用户给出的数字是整数还是双精度?,c,C,我们在课堂上有一个问题:我们应该从用户那里得到一个数字(scanf),我们应该检查它是整数还是双数 如果是double,我们应该写“double”,如果是整数,我们应该写“integer” 如何检查它是整数还是双精度?当然,我们可以使用if/else。 以字符串形式读取输入 解析读取的输入 确定读取的内容是否可以是整数(如果是浮点,则为整数),如果是双精度,则为完全不同的内容 更新: 这个问题确实没有完全确定。也就是说,它没有指定可能允许的整数基数。我将如何操作,示意图: 将整行输入作为字符
- 以字符串形式读取输入
- 解析读取的输入
- 确定读取的内容是否可以是整数(如果是浮点,则为整数),如果是双精度,则为完全不同的内容
更新:
这个问题确实没有完全确定。也就是说,它没有指定可能允许的整数基数。我将如何操作,示意图:
... 我们应该从用户那里得到一个号码。(scanf)
让我们考虑各种输入:
双精度。许多解析为整数的文本也会解析为double
双精度,但它也是一个整数李>
其他考虑:
整数是一个数学概念,而不是C类型李>
像“123.1”这样的输入不太可能精确解析为双精度李>
具有数百个字符的输入会带来问题李>
像“123x”这样的输入最初解析为一个整数,但由于后面的'x'
而失败
继续进行这些合理的假设
A.输入的字符不太多。整数适用于long
B.溢出/下溢/舍入不是问题。
C.如果解析为两者,则称之为整数。
D.要求意味着使用scanf()
-yuk-而不是使用fgets()
你不能int
和double
是C中的类型;它们不是用户可以输入的东西。用户输入始终是字符。将数字作为字符串读取,然后对其进行分析,查看它是否包含
或e
或e
什么是整数?字符串是一个整数吗?因为它看起来像一个,因为它不包含一些字符集,或者因为读取它的软件可以将它表示为整数类型?实际上,我只是出于好玩的原因想向上投票:)事实上,我已经,并收回了我的否决票。'Use a(标准库)函数将字符串解析为整数,以十六进制、八进制、二进制或其他基数表示?@MartinJames这当然取决于您希望所有人都接受什么作为输入,但这与更高级别的概述无关。问题表示scanf
,在这种情况下,这些函数的行为应该类似于scanf
@MartinJames:好的,你说得对,问题没有指定可能允许的整数基。可能有一些…:-)我也在假设,因为这是课堂上的一个问题,有很多关于解决方案应该有多简单的隐含假设。假设它可能不需要完美,因为它不需要处理多个基数,甚至可能不需要处理指数记数法等。隐式假设会导致学生考试不及格,否则他们很容易通过。
const char *TestInput(void) {
char buf[100];
if (sscanf(" %99[^\n]", buf) != 1)
return "No interesting input";
char end;
long long ll;
if (sscanf(buf, "%lli %c", &ll, &end) == 1)
return "Integer";
double d;
if (sscanf(buf, "%lf %c", &d, &end) == 1)
return "double";
return "neither";
}