我有一个包含基本数学运算的文件。一个例子:
1 + 23 / 42 * 23
我正在扫描文件,将每个“元素”放入一个结构中并将其推送到我创建的堆栈中。我遇到的问题如下:
char reading;
while(!feof(fp)) {
fscanf(fp, "%c", &reading);
....
这将扫描1
, +
, 2
,3
而不是1
, +
, 23
。还有什么其他建议可以使用它fscanf
并让它迭代并按照预期的类型读取所有输入?
问候,
fscanf
对这项工作来说是错误的工具,因为它需要一个预先知道预期格式的格式字符串。您最好的选择是一次读取一个字符并构建您可以解释的标记,特别是如果您必须接受2+2
(无空格)或(1 + 23) / 42
带括号之类的输入。
你应该使用fscanf()
一些不同的,像这样:
char buf[16];
int val;
char op;
while (!feof(fp)) {
fscanf("%s ", buf); // Note: Without ' ' the last value would be readed twice
if (buf[0] == '+' || buf[0] == '-' || buf[0] == '/' || buf[0] == '*') {
op = buf[0];
// do something with op
} else {
sscanf(buf, "%d", &val);
// do something with val
}
}
的大小buf
必须是可以存储数字长度的东西。