c - 在 C 中计算 csv 和 txt 文件之间的行数问题
问题描述
我正在练习用 C 编程,我决定创建一个函数来计算文件中的行数,以便以后在创建矩阵时使用。当我为它提供不同的文件类型时,问题就出现了。我注意到,当我为函数提供一个 txt 文件时,它的计数比它需要的少一个,而 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
好的选择。
一旦您的算法涵盖了所有这些测试用例,它可能也适用于文件。
推荐阅读
- sql - 在 Oracle 11g 中合并时,我想删除与源不匹配的目标行
- powershell - Powershell工作流程,禁用UAC后在本地安装软件?
- python - 如何在 DataFrame 列中“关闭”匹配对
- python - 已模拟的类中的模拟方法
- c++ - 在 Windows 10 c++ x64 上从内存执行代码?
- node.js - 如何使用 Mongodb 和 NodeJs 根据文件名对每个文档的值求和
- typescript - Using union type with generic
- laravel - htaccess 使用 301 重定向强制 https 但发现它实际上是 302
- sqlite - 使用 GROUP BY 的 SQLite MAX 明显慢于 MIN
- angular - 角度服务和网络工作者