对于家庭作业,我们需要输入简单的公式(例如3*2
,4+10
,50/16
等)并仅使用加法,减法来计算结果(和休息)和位移。无论如何,我可以使用三个后续输入读数,但我想我会尝试使用fgets()
和sscanf()
一次性获取公式。这就是我所拥有的:
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修剪额外的空格。
答案 0 :(得分:2)
尝试使用%c
代替%s
。如果运算符始终是单个字符,并且运算符和操作数之间没有空格,则这应该有效。
顺便说一句,您是否正在初始化v
,m
和o
以实际指向某些内容?这样做会好得多:
int v;
int m
char o;
int res = sscanf(buffer, "%d%c%d", &v, &o, &m);
正如我的“C语言编程简介”教授曾经说过:“C很危险。练习安全C!”。
答案 1 :(得分:1)
您可以使用%[-+*/]
(使用您的运算符集)来确保该运算符字符串仅获取运算符字符。
答案 2 :(得分:0)
由于您没有多余的空格且运算符都是一个字符长,您可以使用%c
填写o
。