使用fscanf而不吃它

时间:2013-12-08 02:33:16

标签: c scanf

这就是我想要做的事情: 如果我有一个整数后跟一个特定的字符串,我希望它不会被推到一个堆栈,否则我希望它被推到堆栈上。问题是,当我用fscanf测试整数之后的下一个东西时,它“吃掉”下一个东西,并且基本上破坏了我的代码。 例如:


    if(fscanf(read,"%d", &d)) {
        //If next is not the string "dont", then push but dont "eat" dont!
        push(d, write);
    }

2 个答案:

答案 0 :(得分:1)

由于您在文件中,因此您始终可以使用ftell()记住当前位置,然后返回fseek()

const long pos = ftell(read);

if(fscanf(read,"%d", &d)) {
    push(d, write);
    fseek(read, pos, SEEK_SET);
}

答案 1 :(得分:0)

使用ungetc()

#include <stdio.h>
int ungetc(int c, FILE *stream);

这样您就可以放回一个 char

char ch;
fscanf(read,"%d%c", &d, &ch);
if (WantToPutChBack(ch)) {
  ungetc(ch, read);
}

你只能在“再次获得”之前放回一个char,希望这已经足够了。