我如何检查用户的输入是否是浮点数?

时间:2018-05-16 02:43:03

标签: c

我想写一个if语句,如果用户输入是一个浮点数然后X发生但我实际上并不知道如何将其转换为代码。代码如下,如果有人可以帮助我那将是伟大的。

// declare a variable
float i = 0;

// ask for an input
scanf( "%f", &i );

// if the input is a float
if() <--- DON'T KNOW WHAT TO PUT HERE
{
// print normally
printf();
} 

// in all other cases
else 
{
// print an error message
printf();
}

很抱歉,如果这是一个非常简单的问题,但我对学习C语言非常陌生。

3 个答案:

答案 0 :(得分:1)

您检查scanf调用的返回值 - 它会告诉您成功完成了多少次转换:

if (scanf("%f", &i) == 1) {
    // the input is a float
} else {
    // all other cases -- print an error message
}

答案 1 :(得分:1)

首先将其作为字符串阅读:

char message[100+1];
char *end = NULL;
double result = 0.0;
scanf("%100s", message);

然后尝试安全转换为双倍:

result = strtod(message, &end);
if ((end == message) || errno == ERANGE)) {

    // not a floating point value

}
else {
    // is a floating point value - stored in result
}

答案 2 :(得分:1)

测试用户输入是否为float

第1步:使用fgets() @DeiDei将输入作为字符串读取。最好避免scanf()

char buf[1000];
if (fgets(buf, sizeof buf, stdin) == NULL) {
  puts("End-of-file or rare input error occurred");
  return;
}

可以测试(未显示)缓冲区是否使用输入太大。国际海事组织,认为是敌对的攻击。<​​/ p>

现在解析字符串;

errno = 0;
char *endptr;
float f = strtof(buf, &endptr);
if (buf == endptr) {
  puts("No conversion");
  return;
}

while (isspace((unsigned char) *endptr) endptr++;
if (*endptr) {
  puts("trailing junk");
  return;
}

if (errno == ERANGE) {
  puts("Out of `float` range.");  // too big or maybe too small
  // suggest continue on and use the +/- HUGE_VALF or wee number. 
} else if (errno) {
  puts("Implementation additional error.");
  return; 
}

// use `f`