C语言 使用fscanf读文本文件 想使用如下代码跳过所有#开头的注释以及空行 但是while结束后必须再跳一行才能读到数据
char* sign = (char*)malloc(sizeof(char));
fscanf(fp, "%c", sign);
while (strcmp(sign, "#") == 0 || strcmp(sign, "\n") ==0 )
{
fscanf(fp, "%*[^\n]\n");
fscanf(fp, "%c", sign);
}
fscanf(fp, "%*[^\n]\n");//必须加上这一句再跳一行读取才能读到下面的数据
while (fscanf(fp, "%d %d", &a, &b) != EOF)
sign 只有1个字节,构不成字符串,后面的strcmp结果未知。用while (sign == '#' || sign == '\n')
这有什么问题吗,你代码就是这样写的啊,先读一个字符,然后循环里面先跳过一行,再读一个字符
那么当while里读到的字符是#时,循环结束了,没有跳过一行,你后面当然要补一行
如果你想简化代码,那改成
while (1)
{
fscanf(fp, "%c", sign);
if(sign=='#' || sign=='\n')
fscanf(fp, "%*[^\n]\n");
else
break;
}