Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fgetc()不返回'\n';人物_C - Fatal编程技术网

fgetc()不返回'\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。 重写为如下

我正在尝试使用file*类型读取文本文件。除了使用fgetc()函数外,一切正常

事实上,我想检查文件中有多少个'\n'字符,但即使我正在读取的文件中有一个'\n'字符,函数也不会返回该值。有人经历过这种情况吗

我使用的代码如下所示:

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;