2014-11-04 54 views
-2

我想读取一个方程中的mx + b = y形式,其中m,b和y是整数,x是一个字符。如何读取整数和字符,并检查用户是否以完全形式输入数据。也就是说,我需要检查用户输入'+'符号和'='符号并使用正确的变量。例如)我希望它接受mx + b = y但不是mX + b = y或另一个示例:接受mx + b = y但不是mx-b = y。而且我也需要它在等式之后忽略任何额外的输入。使用多种数据类型的scanf

我已经使用类似的尝试:

的scanf( “%d%C%C%d%C%d”,&米,& X,&符号,& B,& equal_sign,&ÿ );

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

对不起,冗长的措辞,但我会感谢任何帮助,只是让我知道,如果我需要澄清任何事情。谢谢。

+2

http://stackoverflow.com/questions/26697549/scanf-to-read-multiple-data-types-from-one-input – BLUEPIXY 2014-11-04 08:50:23

回答

-1

时,你有输入提示,你应该尝试输入一个值标签另一个值比tab..and等等。直到你输入的所有值。

的scanf( “%d%C%C%d%C%d”,&米,& X,&符号,& B,& equal_sign,& Y);您输入

第一个值将压片 第二个值将被赋给x 压片后分配到m, ..

做,直到你输入的所有值..

+0

-1:这并没有真正回答这个问题 - 你至少应该提供一个简单的代码示例来说明你想说的话。 – 2014-11-04 08:09:42

+0

事情是我不能指望用户输入任何一个某种形式的方程。如果他们输入它错误地我想返回一个错误,但如果他们输入它正确,包括正确的变量,而“+”和“=”号,我要接受它。 – Denny 2014-11-04 08:11:51

+0

你需要使用if/else或开关情况下所需的variable..and如果该变量不符合我们的要求,要求再次输入用户... 像 的scanf(); if(x!='X') {再次扫描} – 2014-11-04 08:14:24

4

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

您可能想要parse表达式为AST,例如,使用一些recursive descent parsing技术。又见infix-calc example of GNU bison

如果你确信你输入的形式为正是一个x +b=Ç你可以(因为你想只输入3x-5=8这是不自然的3x+-5=8)混合使用strtol。另请参见strncmp(3)strtok(3)

PS。按照全部我在这里给你的链接。他们是全部相关!

0

获取字符串格式(缓冲液)的方程,并使用sscanf函数解析这个缓冲器。通过使用scanf函数可能会出现刷新事物的问题

+0

-1:这并没有真正回答这个问题 - 您至少应该提供一个简单的代码示例来说明您想说的话。 – 2014-11-04 08:55:38