这就是我想要做的事情: 如果我有一个整数后跟一个特定的字符串,我希望它不会被推到一个堆栈,否则我希望它被推到堆栈上。问题是,当我用fscanf测试整数之后的下一个东西时,它“吃掉”下一个东西,并且基本上破坏了我的代码。 例如:
if(fscanf(read,"%d", &d)) { //If next is not the string "dont", then push but dont "eat" dont! push(d, write); }
答案 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
,希望这已经足够了。