我想写一个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语言非常陌生。
答案 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`