我正在尝试在文本文件中读取换行符,从而计算文本文档中的行数
.txt文件的内容:
我
名称
是
约翰
输出我的代码:
牛
小号
在
行号为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
答案 0 :(得分:0)
你在while循环中进行了两次fgetc
。你也没有任何特别的理由将ch复制到dh。我改进了你的代码,对它进行了测试,它完美无瑕。你去了:
while ((ch = fgetc(filepointer)) != EOF)
{
printf("%c",ch);
if (ch == '\n')
count++;
}
此外,您需要初始化int ch = 0;
,因为您在获得任何导致未定义行为的值之前将其打印出来。