我怎么知道用户给出的数字是整数还是双数?

时间:2015-11-08 14:17:22

标签: c

我们在课堂上有一个问题:我们应该从用户那里得到一个数字(scanf),我们应该检查它是整数还是双数。

如果它是双精度型,我们应该写“Double”,如果它是一个整数,我们应该写“整数”

如何检查它是整数还是双?当然我们可以使用if / else。

3 个答案:

答案 0 :(得分:1)

  • 将输入读为字符串
  • 解析输入读取
  • 决定读取的内容是否为整数,(否则为float),否则为double或其他完全不同的内容。

更新

问题确实没有完全确定。也就是说,它没有指定可能允许的整数基数。

答案 1 :(得分:1)

我将如何做,示意性地:

  1. 以字符串形式读取整行输入。
  2. 修剪字符串中的所有前导和尾随空格。
  3. 使用(标准库)函数将字符串解析为整数,也返回成功解析的字符数。
  4. 使用(标准库)函数将字符串解析为float,它还返回成功解析的字符数。
  5. 比较两个解析。如果整数解析管理整个字符串,那么它是一个整数。否则,如果float管理整个字符串,那么它就是一个浮点数。否则,如果既没有管理,那么这是虚假输入。
  6. 在第5步中首先检查整数然后检查float是很重要的,因为整数输入通常也可以解析为float,所以整数应该优先。

答案 2 :(得分:1)

  

...如果用户给定的数字是整数还是双数?   ......我们应该从用户那里得到一个号码。 (scanf)......

让我们考虑各种意见:

  1. " 123",肯定是整数,但它也会解析成功的double。解析为整数的大部分文本也会解析为double
  2. " 123.5"将解析为double,但不是整数
  3. " XYZ"会失败。
  4. " 1e10000"会溢出大多数double,但它也是整数
  5. 其他考虑因素:

    1. 整数是数学概念,而不是C类型。
    2. 输入如" 123.1"不太可能将完全解析为double
    3. 输入数百个角色姿势问题。
    4. 输入类似" 123x"最初解析为整数,但失败并跟踪'x'
    5. 继续这些合理的假设。

      一个。输入的字符不是太多。 整数适合long long B.溢出/下溢/倒圆不是问题 C.如果同时解析,则将其称为整数 D.要求意味着使用scanf() - yuk - 而非使用fgets()

      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";
      }