c - 使用 scanf 处理多种数据类型

标签 c gcc types scanf

我正在尝试读取 mx+b=y 形式的方程,其中 m、b 和 y 是整数,x 是字符。如何读取整数和字符并检查用户是否以确切的形式输入数据。也就是说,我需要以某种方式检查用户是否输入“+”符号和“=”符号并使用正确的变量。例如)我希望它接受 mx+b=y 但不接受 mX+b=y 或另一个例子:接受 mx+b=y 但不接受 mx-b=y。而且我还需要它忽略方程之后的任何附加输入。

我尝试过使用类似的东西:

scanf("%d %c %c %d %c %d", &m, &x, &sign, &b, &equal_sign, &y);

使用这种格式,它可以正确读取第一个数字,但会跳过将下一个字符放入变量 x 中,而是将其放入符号中。

很抱歉措辞冗长,但我希望得到任何帮助,如果我需要澄清任何事情,请告诉我。谢谢。

最佳答案

我会使用 getline(3) 读取整行或者fgets(3)然后使用 strtol(3) 手动解析包含该行的缓冲区带有给定的结束指针,或 sscanf(3) (显式测试返回的计数,并且可能使用 %n 格式说明符)。

您可能想要parse AST 中的表达式,例如使用一些recursive descent parsing技术。另请参阅infix-calc example of GNU bison

如果您确定您的输入完全格式为a x + b = c (这对于 3x+-5=8 来说是不自然的,因为您只想输入 3x-5=8)您可以混合使用strtol。另请参阅strncmp(3)strtok(3)

PS。请点击我在这里为您提供的所有链接。它们相关!

关于c - 使用 scanf 处理多种数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26730275/

相关文章:

dynamic - 使用ANTLR的动态类型语言示例

c++ - 按值传递的函数参数的常量正确性

c++ - gcc 和 g++ 库搜索路径

c++ - 分配 : *** error for object 0x1029249b0: pointer being freed was not allocated

typescript - 将枚举值映射到类型

arrays - 如何在不限制其维度的情况下为函数参数指定类型?

c++ - MakeFile.am : Mixing c and c++, 新错误

c - 为什么我从代码中带有位域的 C union 获得此输出?

c++ - C++ 中的反跳用户输入

c++ - 为变量存储设计内存块