请详细解析C语言自定义GetLine函数的功能及作用
自定义GetLine函数功能解析
一、相关代码
void GetLine(FILE *fp) { char one_char; one_char = fgetc(fp); do { one_char = fgetc(fp); } while (!feof(fp) && one_char != 10); }
二、调用代码片段
FILE *fp; ... fscanf(fp, "%d %d", &inull, &nbmat); GetLine(fp); for (i = 0; i < nbmat; i++) { fscanf(fp, "%d %d", &tcode, &n); ... }
三、对应文件内容
1 12 Description of $CODE 20012 1 Compressibility of fluid 0 0.0 ...
四、已知执行步骤
- 首次
fscanf读取文件中的整数1和12,分别存入inull和nbmat; - 调用
GetLine函数(功能待明确); - 进入循环,循环次数为0到11;
- 循环内的
fscanf读取文件中的整数20012和1,分别存入tcode和n;
五、GetLine函数功能详细解析
这个函数的核心作用是跳过当前行剩余的所有字符,将文件指针移动到下一行的起始位置,具体逻辑如下:
结合调用场景和文件内容拆解:
- 首次
fscanf读完第一行的1和12后,文件指针停留在12后的空格处,此时第一行还剩Description of $CODE和换行符未读取; - 调用
GetLine后:- 先执行一次
fgetc(fp),读取12后的空格字符; - 进入
do-while循环,逐个读取后续字符(包括Description、空格、of、空格、$CODE),直到读取到换行符(ASCII码10)或者文件末尾;
- 先执行一次
- 执行完毕后,文件指针刚好定位到第二行开头(
20012的第一个字符位置),确保后续循环里的fscanf能精准读取下一行的整数,不会被当前行剩余的文本干扰。
内容的提问来源于stack exchange,提问作者TINGHAIK
相关产品推荐
相关产品推荐

