【问题标题】:Strange behavior in file reading in CC中文件读取的奇怪行为
【发布时间】: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; } : 无限循环。

标签: c file csv io


【解决方案1】:

你在while循环中有无限循环。

if (count == 0) {
    continue;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2012-03-12
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多