【问题标题】:How to know if the input the user has given is string or float or integer in C programming在C编程中如何知道用户给出的输入是字符串还是浮点数或整数
【发布时间】:2017-07-02 22:41:13
【问题描述】:

用户只输入一次,输出应根据输入打印。

  • 如果用户输入一个字符串,它应该打印“It is string”。
  • 如果用户输入一个整数,它应该打印“It is Integer”。
  • 如果用户输入一个浮点数,它应该打印“It is Float”。

【问题讨论】:

  • 这取决于程序员,他如何接受输入!
  • 以字符串的形式读取数据(fgets() 可能——可能,甚至),然后分析字符串。您可以使用sscanf()strtol()strtod() 等来决定字符串中的内容。由于您捕获了输入,因此您可以以不同的方式对其进行分析。
  • 没有来自stdin 的输入是intfloat。输入是文本,并进行相应的解释。假设输入是01EFh。是数字还是字符串?
  • 您可以通过chux 来查看answer 的问题How can I know if the number given by the user is Integer or double?,该问题接近重复,并且答案(应该)有效。或者,它可以使用%n 而不是%c 并检查结尾是否为空字节(因此它会跳过前导和尾随空格)。如果整数和浮点数都没有导致字符串结尾,则输入不是整数或浮点数,因此它必须是字符串。
  • 还有这个answer by user694733 到问题How to check if the number is integer or float?。这使用了一次%n - 它应该使用两次。

标签: c input


【解决方案1】:

使用fgets 读入一行,然后在缓冲区上重复调用sscanf,使用不同的格式说明符。检查每个sscanf调用的返回值,看看格式是否正确

char line[80];
int ival;
float fval;

fgets(line, 80, stdin);

if (sscanf(line, "%d", &ival))
    printf("It is integer\n");
if (sscanf(line, "%f", &fval))
    printf("It is float\n");
else
    printf("It isn't an int nor a float; it is a string\n");

顺便说一句,sscanf 调用的顺序很重要。从if-else 阶梯顶部的最具体的格式说明符开始,以最通用的格式说明符结束。

如果你想处理有效的输入,但最后有垃圾,你将不得不使用strtol,这更复杂。

【讨论】:

  • 是的,不,也许:如果输入是3.14159eggs-per-basket,那么它会报告“它是一个整数”(因为第一个字符是一个整数),如果允许它会报告“它是一个浮点数”(因为前七个字符是一个浮点值),但它可能应该报告“它是一个字符串”,因为整个输入既不是整数也不是浮点数。我同意“使用fgets()”,但分析必须更精细。
  • @JonathanLeffler,这是规范问题,而不是猜测问题。什么是有效输入,必须检查这些输入(包括错误)。
  • 3.14159eggs-per-basket 将被指定为“ [[] ]”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2010-09-09
相关资源
最近更新 更多