我正在尝试使用FILE *类型读取文本文件。除了使用fgetc()函数外,其他一切都很好。
实际上,我想检查文件中有多少个'\ n'字符,但是即使我正在读取的文件中有一个字符,该函数也不会返回该值。有人遇到过这种情况吗?
我正在使用的代码如下:
char ch;
while (ch!=EOF) {
ch = (char) fgetc(gl_file);
if(ch=='\n') newline_counter++;
}
newline_counter
仍为0。
答案 0 :(得分:3)
在检查ch
的值之前,不要初始化ch
,并且char
为fgetc
,而int
返回int ch;
while ((ch = fgetc(fp)) != EOF)
{
if(ch == '\n')
++newline_counter;
}
。
重写为类似的内容:
textLen
答案 1 :(得分:-2)
无需强制转换fgetc
的返回值。使用getc
而不是fgetc
:
getc()
与fgetc()
等效,不同之处在于它可以被实现为对 stream 进行多次评估的宏。
char ch = getc(fp);
do{
if (ch == '\n') ++newline_counter;
} while ((ch = getc(fp)) != EOF);
或者您可以使用getline()
:
getline()
从 流 读取整行。
char *ch = NULL;
size_t len = 0;
while (getline(&ch, &len, file) != -1)
++line;
如果在调用之前将
*ch
设置为NULL
,并且将*len
设置为0
,则getline()
将分配用于存储行的缓冲区。 / p>