linux c为什么到了文件结尾循环还是不停呢 eof,C:使用fgetc()解析文件 - EOF无限循环(示例代码)...

各位大家好@Stackoverflow,

目前我正在尝试为.obj文件格式编写一个简单的解析器,但是在我读取file.txt中的最后一条注释后,我的解析器在某种程度上陷入无限循环。但它也发生在中间。

解析器应该执行以下操作:

如果当前char是'#',它应该打印“COMMENT”并跳过这一行,如果它是'v',它应该打印“VERTEX”并跳过该行。

即使我使用调试器逐步执行代码,我仍然无法找到问题。

file.txt的:

# Comment1

# Comment2

# Comment3

v Vertex1

# Comment4

码:

int main()

{

FILE *file = fopen("file.txt", "r");

if(file==NULL)

{

return -1;

}

int currentChar=0;

while(currentChar!=EOF)

{

currentChar=fgetc(file);

printf("CURR CHAR: %c

", currentChar);

switch(currentChar)

{

case '#':

{

printf("COMMENT

");

currentChar=fgetc(file); //Read Whitespace 1x

while(currentChar!='

')

currentChar=fgetc(file);

break;

}

case 'v':

{

printf("VERTEX

");

currentChar=fgetc(file); //Read Whitespace 1x

while(currentChar!='

')

currentChar=fgetc(file);

break;

}

}

}

return 0;

}

我仍然看不出问题出在哪里。

真诚,有毒

答案

你可能想要这个:

#include

int main()

{

FILE *file = fopen("file.txt", "r");

if (file == NULL)

{

return -1;

}

int currentChar = 0;

while (currentChar != EOF)

{

currentChar = fgetc(file);

if (currentChar == EOF) // if EOF stop loop immediately,

// it's pointless to continue

break;

printf("CURR CHAR: %c

", currentChar);

switch (currentChar)

{

case '#':

{

printf("COMMENT

");

currentChar = fgetc(file);

while (currentChar != EOF && currentChar != '

') // skip until

or EOF

currentChar = fgetc(file);

break;

}

case 'v':

{

printf("VERTEX:

currentChar = fgetc(file);

while (currentChar != EOF && currentChar != '

') // read until

or EOF

{

printf("%c", currentChar);

currentChar = fgetc(file);

}

printf(">

");

break;

}

}

}

return 0;

}

它主要基于您的原始代码。所有评论都是我的。

另一答案

它看起来像是在等待换行符。你的开关盒内的循环可能是罪魁祸首。将你的循环改为:

while(currentChar != EOF && currentChar != '

')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值