2010-10-08 24 views
0

我有一个有4个变量的方程,我提示用户输入这些变量中的每一个,然后程序根据输入的变量决定它需要解决哪些变量。例如,给定变量a和b,我需要解决b和c。我正试图想出一种方法来确定哪些变量已被输入,哪些变量没有被输入。这是我到目前为止已经在想:如何测试方程式的用户输入?

int a,b,c,d; 
char unknown; 
cout<<"****This program decides which variables to solve for****\n; 
cout<<"Please enter the known variables below, if a variable is unknown, 
please enter a'?'\n" 
cout<< "please enter variable a\n"; 
cin>>a; 
cout<< "please enter variable b\n"; 
cin>>b; 
etc.... 
if (a =='?'){ 
check b,c,d} 
if (b =='?'){ 
check c,d} 

,然后运行通过的if语句,以确定哪些变量是存在的,哪些不是这些变量。然而,必须有一种更简单的方法,如果这些陈述有可能是荒谬的话。如果您有任何建议,非常感谢。谢谢!

+1

这里真正的问题不在于I/O,这是你如何代表变量和存储方程。你有没有为这一方面编写任何代码? – Potatoswatter 2010-10-08 00:14:06

+0

好吧,它主要基于哪些变量是已知的,哪些是未知的。等式必须根据哪些变量已知来重新排列。所以每个已知变量都会有不同的情况。 (switch operator?) – Ryan 2010-10-08 00:18:24

+1

问题也出在IO上,因为你不能在'int'变量上使用'operator >>'并希望在那里得到一个''?'',这是一个char。你应该用'getline'获取整行,并用'istringstream'分开处理。 – 2010-10-08 00:41:01

回答

1

您发布的伪代码将不起作用,因为>>x其中xint会尝试将用户的输入解释为整数的规范。因此,用户输入?会发生什么情况是操作失败,cin将处于故障状态,并且在进一步的输入操作被忽略之前或者如果该故障状态被清除。

解决此问题的方法之一是通过使用<string>标头中的std::getline,一次输入一行到std::string。当你有输入行时,你可以检查它是否是问号(或者更简单,只是空的)。如果不是的话,你可以尝试通过使用例如用户的号码规格转换为int。一个std::istringstream(我记得从<sstream>标题)。

即使您可能会发现“Potatoswatter”评论说您正在为此操作的问题可能相当复杂,但让这部分工作起来可能很有意义。

干杯&心连心,

- 阿尔夫

相关问题