#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
float a;
float b;
float gr;
gr = (1 + sqrt(5)) / 2;
gr = floorf(gr*1000 + 0.5) / 1000;
printf("Enter two numbers: ");
scanf("%f %f", &a, &b);
if(isalpha(a) || isalpha(b))
{
printf("\nInvalid input.\n");
exit(0);
}
float result = a/b;
if(floorf(result*1000+0.5)/1000 != gr)
{
float temp;
temp = a;
a= b;
b = temp;
result = a/b;
}
result = floorf(result*1000+0.5)/1000;
if(result == gr)
{
printf("\nGolden ratio!\n");
} else if(result != gr) {
printf("\nMaybe next time.\n");
}
return 0;
}
除了“if(isalpha(a) || isalpha(b))”部分之外,一切正常。 我想让程序检查用户输入是否是数字 但是当我运行它并输入 a 和 b 时,它会打印出“也许下次”, 不是“无效输入”... 任何帮助将不胜感激!!
最佳答案
假设您输入 2 个字母,而不是数字:
Enter two numbers: x y
因为您使用 %f
,所以 scanf
需要数字。但由于第一个字母是x
,所以它会立即停止。 a
和 b
均保持不变。这意味着两件事:
由于
a
和b
未初始化,比较它们的值没有任何意义。在
a
和b
上使用isalpha
根本没有任何意义,因为该函数需要一个字符,而不是 float 。
幸运的是,scanf
返回成功转换的数量。因此,将您的测试更改为
printf("Enter two numbers: ");
if(scanf("%f %f", &a, &b) != 2) // 2 conversions expected
{
printf("\nInvalid input.\n")
关于c - C语言中如何判断是否为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44241407/