1

我有一个包含基本数学运算的文件。一个例子:

1 + 23 / 42 * 23

我正在扫描文件,将每个“元素”放入一个结构中并将其推送到我创建的堆栈中。我遇到的问题如下:

char reading;
while(!feof(fp)) {
  fscanf(fp, "%c", &reading);
  ....

这将扫描1, +, 2,3而不是1, +, 23。还有什么其他建议可以使用它fscanf并让它迭代并按照预期的类型读取所有输入?

问候,

4

2 回答 2

1

fscanf对这项工作来说是错误的工具,因为它需要一个预先知道预期格式的格式字符串。您最好的选择是一次读取一个字符并构建您可以解释的标记,特别是如果您必须接受2+2(无空格)或(1 + 23) / 42带括号之类的输入。

于 2012-07-14T13:06:31.817 回答
0

你应该使用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必须是可以存储数字长度的东西。

于 2012-07-14T15:35:21.017 回答