c - 在 C 中计算 csv 和 txt 文件之间的行数时出现问题

标签 c stdio

我正在练习 C 语言编程,我决定创建一个函数来计算文件中的行数,以便稍后在创建矩阵时使用。当我向它提供不同的文件类型时,问题就出现了。我注意到,当我向函数提供 txt 文件时,它的计数会比所需的少 1,而 csv 会计算正确的行数。

int countRows(char fileName[100]){
    FILE *fp;
    int nl = 1;
    char c;

    fp = fopen(fileName, "r");
    for (c = getc(fp); c != EOF; c = getc(fp)){
        if(c == '\n'){
            nl = nl + 1;
        }
    }

    fclose(fp);
    return nl;
}

假设我有一个txt文件

age name    score
15  jared   90
16  jerome  85
18  timmy   9

我期望输出 4 行。

最佳答案

为了使算法正确,您应该编写一个类似的函数来计算字符串的行数。以下是一些测试用例:

  • "" 有 0 行
  • "hello" 有 1 行,但没有任何 \n 字符
  • "\n" 有 1 行
  • “hello\n”也有 1 行
  • "hello\n\n\n" 有 3 行
  • “\ntext” 有 2 行

您应该为这些测试用例编写自动测试。 assert 宏是一个简单且不错的选择。

一旦您的算法涵盖了所有这些测试用例,它可能也适用于文件。

关于c - 在 C 中计算 csv 和 txt 文件之间的行数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54740535/

相关文章:

c - 以错误的方式定义结构

c - C语言中将数组一分为二

c - `getchar()` 返回错误的具体情况是什么?

c - 'FILE' 在 Contiki 中是未知类型

node.js - child_process流背压

c++ - 从 c 调用 swift

c - 简化c中的多个整数

c - fclose 不可能的正确错误处理(根据联机帮助页)?

c - fread 只有 .PNG 文件的前 5 个字节

c - C中字符串的哈希函数