2010-11-18 49 views
1

中读取简单的公式字符串作为作业,我们需要输入简单的公式(如3*2,4+10,50/16等),并使用加法,减法和位移计算结果(和休息) 。无论如何,我可以使用三个后续的输入读数,但我想我会尝试使用fgets()sscanf()一次性获得公式。以下是我有:C,从输入

int *v; // value (left side) 
int *m; // modifier (right side) 
char *o; // operant 

int res = sscanf(buffer,"%d%s%d",v,o,m); 

但当然,这是不行的,因为o得到该字符串的所有剩余部分,留下m一无所有(m等于任何值就是它被宣布时)

现在,完成此操作的正确方法是什么?

注意:我使用a trim function修剪多余的空格。

回答

2

尝试%c,而不是%s。如果操作符总是单个字符,并且操作符和操作数之间没有空格,则应该起作用。

顺便说一句,你初始化v,mo实际上指向什么?这将是更好的做到这一点:

int v; 
int m 
char o; 

int res = sscanf(buffer, "%d%c%d", &v, &o, &m); 

由于我的“介绍在C程序设计”教授常说:“C是危险的做法安全的C!”。

+1

我省略了初始变量的声明(他们不是指针开始,但我通过他们的指针指向一个函数,其中'的sscanf()'坐) – 2010-11-18 14:44:43

+0

确定。只是检查。这是一个常见的错误,我不得不问。 – Dima 2010-11-18 14:47:39

0

由于您没有多余的空格,并且运算符都是一个字符长,因此可以使用%c填写o

+0

我可以...这将是一个简单而快速的解决方案,所以我不必编写整个公式分析器:P – 2010-11-18 14:47:05

1

您可以使用%[-+*/](与运营商的设置),以确保,即运营商串只能得到运营商的字符。