【发布时间】:2017-01-19 06:56:55
【问题描述】:
所以我想从 csv 文件中读取一些数据。
但是 fgets 在 while 循环中不断给我 NULL。它在while循环之外工作正常。
也许我在这里遗漏了一些明显的东西。
编辑:我刚刚清理了代码
int main(int argc, char *argv[])
{
FILE *input_file = fopen("free-zipcode-database-Primary.csv","r");
char buffer[1024];
if (input_file == 0) {
fprintf(stderr,"Cannot open input file.\n");
}
int count = 0; // to skip the first line in csv that contains the titles
while (1)
{
if (count == 0)
{
continue;
}
if (fgets(buffer, 1024, input_file) != NULL)
{
puts(buffer);
parseDataFromCSV(buffer);
} else {
break;
}
count++;
}
fclose(input_file);
return 0;
}
编辑:这是工作代码。
FILE *input_file = fopen("free-zipcode-database-Primary.csv","r");
char buffer[1024];
if (input_file == 0)
{
fprintf(stderr,"Cannot open input file.\n");
}
/* skip the first line in csv file */
fgets(buffer, 1024, input_file);
while (1)
{
if (fgets(buffer, 1024, input_file) != NULL)
{
puts(buffer);
parseDataFromCSV(buffer);
bzero(buffer,1024);
break;
} else {
break;
}
}
fclose(input_file);
【问题讨论】:
-
if (fgets(buffer, 1024, input_file) != NULL)有一个!=,但if (fgets(buffer, 1024, input_file) == NULL)有一个==。这是故意的吗? -
第一次调用
buffer读入了多少个字符?也许 EOL 字符没有被识别并且一切似乎都在一条线上?此外,编写方式,第一行将在循环外读取,然后跳过第二行,处理第 3 行以上。 -
@Downvoter 是的,它是检查 fgets 是否返回 NULL,但我不知道为什么。我要编辑代码。
-
@ChrisRyding:我之前正在测试它。很抱歉造成混乱。让我编辑代码以清理它。
-
if (count == 0) { continue; }: 无限循环。