我试图以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,而是将其放入符号中。
对于冗长的措辞感到抱歉,但我很感激任何帮助,如果我需要澄清任何事情,请告诉我。感谢。
答案 0 :(得分:4)
我会使用getline(3)或fgets(3)读取整行,然后手动解析包含该行的缓冲区,使用带有给定结束指针的strtol(3)或sscanf(3)(显式测试返回的计数,也许使用%n
格式说明符。)
您可能希望将parse表达式加入AST,例如使用一些recursive descent parsing技术。另请参阅infix-calc example of GNU bison
如果您确定输入完全 x +
b =
c (对3x+-5=8
来说不自然,因为你只想输入3x-5=8
),你可以使用strtol
的混合。另请参阅strncmp(3)和strtok(3)
PS。关注所有我在这里给你的链接。他们所有相关!
答案 1 :(得分:0)
以字符串格式(缓冲区)获取等式,并使用sscanf函数解析此缓冲区。通过使用scanf函数可能存在类似事物的问题
答案 2 :(得分:-1)
当您收到输入提示时,您应该尝试输入一个值而不是标签而不是另一个值而不是标签...依此类推。直到你输入所有值。
scanf(“%d%c%c%d%c%d”,& m,& x,& sign,& b,& equal_sign,& y);
您输入的第一个值将分配给m, 按下选项卡后 第二个值将分配给x 按标签..
在您输入所有值之前执行此操作..