【问题标题】:How do i know if the input is an character or a float number with scanf?我如何知道输入是字符还是带有scanf的浮点数?
【发布时间】:2019-12-28 18:16:13
【问题描述】:

我正在尝试制作一个没有任何错误的简单计算器,但此外,例如,如果我输入“a”,则程序会出现意外输出。 基本上我的问题是,当我输入一个字符时,我该怎么做才能让程序显示警告。 也许scanf 会返回任何有用的值?

【问题讨论】:

  • 如果您想输入表示“计算这一行”,请使用getlinefgets 读取该行。然后解析它,可能使用sscanf,也可能是别的东西。
  • "制作一个没有任何错误的简单计算器" --> scanf() 很难无错误地使用。更简单的方法是使用fgets() 读取用户输入的,然后解析字符串

标签: c scanf calculator


【解决方案1】:

您可以简单地使用 scanf 提供的标志来扫描整数。

int main()
{
    float nb;

    if (scanf("%f", &v) == 1) {
        printf("Is float !\n");
    } else {
        printf("Not a float !\n");
    }
    return 0;
}

scanf 返回成功读取的标志数,所以如果这个数字不是 1(在本例中),这意味着 scanf 无法将您的输入转换为浮点数。

在加法的情况下:

int main()
{
    float a;
    float b;

    if (scanf("%f +%f", &a, &b) == 2) {
        printf("Result is %f\n", a + b);
    } else {
        printf("Error !\n");
        return 1;
    }
    return 0;
}

这可行,但您必须编写确切的 scanf 字符串。我建议你 改为将输入行读取为字符串,然后使用解析它 strtol 或其他函数。

【讨论】:

  • "%f +%f""%f+%f" 更能容忍空白。
猜你喜欢
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多