我想使用fscanf检查文件的格式是否正确,如下所示。
fscanf(fp, "%c%d %d %c%d", &ch, &a, &b, &ch2, &c);
使用这个fscanf后,有没有办法让文件指针回到当前行的开头?fseek是一个可能的解决方案吗?如果是,怎么做?
是否有方法将文件指针返回到使用此fscanf后的当前行?fseek是一个可能的解决方案吗?如果那么,怎么做呢?
是的,有!您可以在fscanf
之前调用ftell()
函数,然后使用fseek
恢复到保存的位置:
long int savePos = ftell(fp); // save current location
fscanf(fp, "%c%d %d %c%d", &ch, &a, &b, &ch2, &c); // do the test read
//.. do something to check your input...
fseek(fp, savePos, SEEK_SET); // restore position
有关ftell
函数的更多信息,请参阅cppreference,但请注意:
对于文本流,数值可能没有意义,但可以仍用于稍后使用将位置恢复到相同位置fseek(如果有使用ungetc放回的字符仍挂起被读取时行为是未定义的(。