【问题标题】:How to check if it is a number or not in C如何在C中检查它是否是数字
【发布时间】:2017-05-29 11:28:03
【问题描述】:
#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时,它会打印出“也许下次”, 不是“无效输入”... 任何帮助将不胜感激!

【问题讨论】:

  • 看看scanf 返回什么是一个好的开始。
  • 我仍然不知道如何解决这个问题...你能给我一个想法吗?
  • 你认为带有浮点参数的isalpha在做什么?
  • 如果scanf没有返回2,则表示读取两个浮点数失败。您是否阅读了链接的参考资料?

标签: c validation input


【解决方案1】:

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

Enter two numbers: x y

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

  • 由于ab 未初始化,比较它们的值没有意义。

  • ab 上使用isalpha 完全没有意义,因为该函数需要一个字符,而不是浮点数

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

printf("Enter two numbers: ");    
if(scanf("%f %f", &a, &b) != 2) // 2 conversions expected
{
    printf("\nInvalid input.\n")

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 2015-04-05
    • 2011-08-05
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多