【问题标题】:Scanf continuous input in CC中的scanf连续输入
【发布时间】:2014-11-04 04:34:22
【问题描述】:
#include <stdio.h>
int main ()
{
    double a=0;
    char b=0;
    scanf ("%d%c",&a,&b);
    printf ("%d,%c", a, b);
    return 0;
}

这是我编写的一个快速测试程序的代码,用于在 C 中使用 scanf 函数。我试图让用户输入类似 78X + 5 = 19 的内容(然后按回车键),然后将其解析为变量a、b 和 c 其中在这种情况下 a=78、b=5、c=19。在示例代码中,当我输入 78X 时,c 不会将值存储到 b 并且只打印“78”,然后终止。为什么它不向 b 存储值?

【问题讨论】:

  • 这不是办法。 "78X+5 = 19" 是相对于 C 的字符串,因此您需要将整个表达式视为通过它解析的字符串并获取 a、b 和 c 所需的值
  • 您不会对scanf 走得太远,因为它对于基本输入以外的任何内容都不是很灵活。研究使用正则表达式库或编写更详细的解析器。

标签: c scanf


【解决方案1】:

如果您的输入是 75x,那么下面是读取值并将其分别存储在 a(75)b(x) 中的代码

   #include <stdio.h>
    int main ()
    {
        int a=0;
        char b=0;
        scanf ("%d%c",&a,&b);
        printf ("%d%c", a, b);
        return 0;
    }

【讨论】:

  • 谢谢!一个快速的后续问题:如果我初始化 int a=0 并使用 %d 作为格式说明符,它可以正常工作,但是如果我初始化 double a=0 并使用 %f 作为格式说明符,它会输出 0.0000,X。这是为什么?
  • 扫描时使用 %lf
【解决方案2】:

格式字符串中的, 很重要。字符串 %d,%c 将匹配输入 78,x 但它不会匹配 78x

您还需要使用%f 来扫描和打印double。使用%d 会导致未定义的行为(可能表现为b 似乎没有出现)。要么更改为%f,要么将您的double 更改为int

【讨论】:

  • 试过了,重新编译,还是不行。
  • 把scanf改成scanf("%d%c", &a, &b);
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多