我在阅读最后有多个新行的控制文件时遇到了问题。
void readControlFromFile (FILE *f)
{
int N = 100;
controlData = (ControlEntry **)malloc(sizeof(ControlEntry *) * N);
char line [10];
controlData[0] = (ControlEntry *)malloc(sizeof(ControlEntry));
fscanf (f, "%d %d %d", &controlData[0]->occurance, &controlData[0]->text, &controlData[0]->pattern);
while(fgets(line, 10, f) != NULL)
{
controlData[lineCount] = (ControlEntry *)malloc(sizeof(ControlEntry));
fscanf (f, "%d %d %d", &controlData[lineCount]->occurance, &controlData[lineCount]->text, &controlData[lineCount]->pattern);
//printf("%d %d %d \n", controlData[lineCount]->occurance, controlData[lineCount]->text, controlData[lineCount]->pattern);
lineCount++;
if(lineCount == N)
{
N*=2;
controlData = (ControlEntry **)realloc(controlData, sizeof(ControlEntry *) * N);
}
}
}
fscanf似乎将默认值0放入缓冲区,我尝试了如下中断:
if(line[0] == '\n')
{
break;
}
但无济于事。我知道这将是一个简单的修复,但我对C有点新。
由于
答案 0 :(得分:0)
您必须检查fscanf(或任何其他* scanf)的返回值。它会告诉你读了多少令牌。