如何检查它是否是C中的数字 #包括 #包括 #包括 #包括 int main() { 浮动a; 浮球b; 浮动gr; gr=(1+sqrt(5))/2; gr=地板(gr*1000+0.5)/1000; printf(“输入两个数字:”); scanf(“%f%f”、&a和&b); if(伊萨尔法(a)| |伊萨尔法(b)) { printf(“\n无效输入。\n”); 出口(0); } 浮动结果=a/b; 如果(地板(结果*1000+0.5)/1000!=gr) { 浮子温度; 温度=a; a=b; b=温度; 结果=a/b; } 结果=地板(结果*1000+0.5)/1000; 如果(结果==gr) { printf(“\nGolden ratio!\n”); }否则如果(结果!=gr){ printf(“\n下次可能。\n”); } 返回0; }

如何检查它是否是C中的数字 #包括 #包括 #包括 #包括 int main() { 浮动a; 浮球b; 浮动gr; gr=(1+sqrt(5))/2; gr=地板(gr*1000+0.5)/1000; printf(“输入两个数字:”); scanf(“%f%f”、&a和&b); if(伊萨尔法(a)| |伊萨尔法(b)) { printf(“\n无效输入。\n”); 出口(0); } 浮动结果=a/b; 如果(地板(结果*1000+0.5)/1000!=gr) { 浮子温度; 温度=a; a=b; b=温度; 结果=a/b; } 结果=地板(结果*1000+0.5)/1000; 如果(结果==gr) { printf(“\nGolden ratio!\n”); }否则如果(结果!=gr){ printf(“\n下次可能。\n”); } 返回0; },c,validation,input,C,Validation,Input,除了“if(isalpha(a)| | isalpha(b))”部分外,一切正常。。 我想做一个程序来检查用户输入的是否是一个数字 但当我运行它并输入a和b时,它会打印出“也许下次”, 不是“无效输入”。。。 任何帮助都会很感激 假设您键入2个字母,而不是数字: #include <stdio.h> #include <math.h> #include <stdlib.h> #include <ctype.h> int main() {

除了“if(isalpha(a)| | isalpha(b))”部分外,一切正常。。 我想做一个程序来检查用户输入的是否是一个数字 但当我运行它并输入a和b时,它会打印出“也许下次”, 不是“无效输入”。。。
任何帮助都会很感激

假设您键入2个字母,而不是数字:

#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;

}
因为您使用的是
%f
scanf
需要数字。但由于第一个字母是
x
,它将立即停止。
a
b
都保持不变。这意味着两件事:

  • 由于
    a
    b
    未初始化,因此比较它们的值没有意义

  • a
    b
    上使用
    isalpha
    毫无意义,因为函数需要的是字符,而不是浮点

幸运的是,
scanf
返回成功转换的次数。所以把你的测试改为

Enter two numbers: x y

一个好的开始将是看看什么回报。可能重复的我仍然不知道如何解决问题。。。你能给我一个主意吗?你认为带浮点参数的isalpha在做什么?如果不返回
2
,那就意味着它无法读取两个浮点数。你读过链接参考了吗?
printf("Enter two numbers: ");    
if(scanf("%f %f", &a, &b) != 2) // 2 conversions expected
{
    printf("\nInvalid input.\n")