fgetc()不返回'\n';人物
我正在尝试使用file*类型读取文本文件。除了使用fgetc()函数外,一切正常 事实上,我想检查文件中有多少个'\n'字符,但即使我正在读取的文件中有一个'\n'字符,函数也不会返回该值。有人经历过这种情况吗 我使用的代码如下所示:fgetc()不返回'\n';人物,c,C,我正在尝试使用file*类型读取文本文件。除了使用fgetc()函数外,一切正常 事实上,我想检查文件中有多少个'\n'字符,但即使我正在读取的文件中有一个'\n'字符,函数也不会返回该值。有人经历过这种情况吗 我使用的代码如下所示: charch; while(ch!=EOF){ ch=(char)fgetc(gl_文件); 如果(ch=='\n')换行符_计数器++; } newline\u计数器保持为0。在检查其值之前不初始化ch,并且ch为char,而fgetc返回int。 重写为如下
charch;
while(ch!=EOF){
ch=(char)fgetc(gl_文件);
如果(ch=='\n')换行符_计数器++;
}
newline\u计数器
保持为0。在检查其值之前不初始化ch
,并且ch
为char
,而fgetc
返回int
。
重写为如下内容:
int ch;
while ((ch = fgetc(fp)) != EOF)
{
if(ch == '\n')
++newline_counter;
}
无需从
fgetc
强制转换返回值。使用getc
代替fgetc
:
getc()
等同于fgetc()
,不同之处在于它可以作为一个宏来实现,该宏可以对流进行多次计算
或者您可以使用getline()
:
getline()
从流中读取整行内容
如果在调用之前*ch
设置为NULL
并且*len
设置为0
,则getline()
将分配一个缓冲区来存储该行
charch代码>==>int ch=0代码>。停止用硬模式转换隐藏警告
没有初始化,因此while(ch!=EOF){
是未定义的行为。要在赋值之前检查ch的值,有一个未定义的BAHEVIOR,或者fgetc
返回int
:EOF
是-1。如果有人在文件上放置0xff,将其转换为char
使其作为文件结尾(通常是不可破坏的空格,所以可能会发生)。在不需要之前不要将其转换为char。那么newline\u counter
定义在哪里?您是否忽略了解释为什么将getc
的结果分配给char
是个坏主意的其他答案和注释?
char ch = getc(fp);
do{
if (ch == '\n') ++newline_counter;
} while ((ch = getc(fp)) != EOF);
char *ch = NULL;
size_t len = 0;
while (getline(&ch, &len, file) != -1)
++line;