【发布时间】:2018-03-01 15:12:09
【问题描述】:
大家好@Stackoverflow,
目前我正在尝试为 .obj 文件格式编写一个简单的解析器,但不知何故,我的解析器在读取了 file.txt 中的最后一条注释后陷入了无限循环。 但它也发生在两者之间。
解析器应该执行以下操作:
如果当前字符是'#',它应该打印“COMMENT”并跳过这一行,如果它是一个'v',它应该打印“VERTEX”并跳过这一行。
即使我使用调试器单步调试我的代码,我仍然找不到问题。
文件.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\n", currentChar);
switch(currentChar)
{
case '#':
{
printf("COMMENT\n");
currentChar=fgetc(file); //Read Whitespace 1x
while(currentChar!='\n')
currentChar=fgetc(file);
break;
}
case 'v':
{
printf("VERTEX\n");
currentChar=fgetc(file); //Read Whitespace 1x
while(currentChar!='\n')
currentChar=fgetc(file);
break;
}
}
}
return 0;
}
我还是看不出问题出在哪里。
真诚地, 有毒
【问题讨论】:
-
currentChar 在进入 while() 之前未初始化。只需添加 currentChar=fgetc(file);之前
-
可能不是问题的原因,但在初始化之前测试
currentChar是错误的。 -
@ShihabPullissery 我也用 int currentChar=0;在进入while循环之前。仍然陷入无限循环。
-
@t0XiC 此代码 while(currentChar!='\n') currentChar=fgetc(file);可以调用无限循环。
-
解决方案可能是有限状态机。 (需要 4 个州中的 3 个)
标签: c parsing infinite-loop eof fgetc