gpt4 book ai didi

c - 使用C识别文件中的换行符

转载 作者:行者123 更新时间:2023-11-30 19:38:41 33 4
gpt4 key购买 nike

我正在尝试读取文本文件中的换行符,从而计算文本文档中的行数

.txt 文件的内容:

我的
姓名

约翰

我的代码的输出:

纳米
s

行号为1

我的代码:

    #include <stdlib.h>
#include <string.h>
#include <stdio.h>


int main()
{

FILE* filepointer ;
filepointer = fopen("C:\\Users\\Summer Work\\Let's C\\Comnsole\\TestFile.txt","rb+") ;

int count = 0 ;
int ch;
printf("%c\n",ch) ;

while ((ch = fgetc(filepointer)) != EOF)
{
printf("%c",ch) ;
ch = fgetc(filepointer) ;

char dh = ch;
if (dh == '\n')
count++ ;
}


printf("\nLine number is %d",count) ;

fclose(filepointer) ;
getchar() ;
return 0;
}

有人可以解释一下为什么会发生这种情况吗?

更新:固定代码

    #include <stdlib.h>
#include <string.h>
#include <stdio.h>


int main()
{

FILE* filepointer ;
filepointer = fopen("C:\\Users\\Summer Work\\Let's C\\Comnsole\\TestFile.txt","rb+") ;

int count = 0 ;
int ch;


while ((ch = fgetc(filepointer)) != EOF)
{
printf("%c",ch) ;
if (ch == '\n')
count++ ;

}


printf("\nLine number is %d",count) ;

fclose(filepointer) ;
getchar() ;
return 0;

}

输出

我的
姓名

约翰
行号为 3

最佳答案

您在 while 循环中执行了两次 fgetc 。此外,您在没有任何特殊原因的情况下将 ch 复制到 dh 。我改进了你的代码,对其进行了测试,它工作完美。就这样:

      while ((ch = fgetc(filepointer)) != EOF)
{
printf("%c",ch);
if (ch == '\n')
count++;
}

您还需要初始化int ch = 0;,因为您在它获取任何值之前打印它,这会导致未定义的行为。

关于c - 使用C识别文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685870/

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