我正在尝试读取 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/