1

基本的な数学演算を含むファイルがあります。例:

1 + 23 / 42 * 23

ファイルをスキャンし、各「要素」を構造体に入れ、作成したスタックにプッシュします。私が抱えている問題は次のとおりです。

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

これは、、、の代わりに1、、、をスキャンします。1つを使用して、タイプに関して意図したとおりにすべての入力を反復して読み取るための他の提案は何ですか?+231+23fscanf

よろしく、

4

2 に答える 2

1

fscanf予想されるフォーマットを事前に知っているフォーマット文字列が必要なため、このジョブには間違ったツールです。最善の策は、一度に1文字ずつ読み取り、トークンを作成して解釈できるようにすることです。特に、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 に答える