gpt4 book ai didi

c - 在C中读取数据文件中的条目数

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:13 24 4
gpt4 key购买 nike

我正在尝试编写一个 C 程序来读取一组数据文件中有多少行/条目。我使用了下面的代码并且它工作正常(来自:What is the easiest way to count the newlines in an ASCII file?)

#include <stdio.h>

int main()
{
FILE *correlations;
correlations = fopen("correlations.dat","r");
int c; /* Nb. int (not char) for the EOF */
unsigned long newline_count = 0;

/* count the newline characters */
while ( (c=fgetc(correlations)) != EOF ) {
if ( c == '\n' )
newline_count++;
}

printf("%lu newline characters\n", newline_count);
return 0;
}

但我想知道是否有办法改变这个位

if ( c == '\n' )
newline_count++;

转换成其他东西,这样如果你的数据看起来像

1.0

2.0

3.0

(有一个条目然后新行是一个空格然后是一个条目然后是空格)而不是

1.0
2.0
3.0

如何让它区分字符/字符串/整数和新行?我试过 %s 但没用..我只是先在一个只有 3 个条目的小文件上尝试这个,但稍后我将在每行之间有空格的地方使用一个非常大的文件,所以我想知道如何区分......或者我应该划分line_count 乘以 2 以获得条目数?

最佳答案

您可以创建一个标志,告诉您在最后一个 \n 之后至少看到了一个非空白字符, 这样您就可以仅在该标志设置为 1 时增加行计数器:

unsigned int sawNonSpace = 0;
while ( (c=fgetc(correlations)) != EOF ) {
if ( c == '\n' ) {
newline_count += sawNonSpace;
// Reset the non-whitespace flag
sawNonSpace = 0;
} else if (!isspace(c)) {
// The next time we see `\n`, we'll add `1`
sawNonSpace = 1;
}
}
// The last line may lack '\n' - we add it anyway
newline_count += sawNonSpace;

将计数除以二是不可靠的,除非您保证在所有文件中都有双倍间距。

关于c - 在C中读取数据文件中的条目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com