假设文件中的文本文件中包含hello\n stack overflow \n
,则输出应为2
,因为有2 \n
个序列。相反,我得到一个作为答案。我究竟做错了什么?这是我的代码:
int main()
{
FILE *fp = fopen("sample.txt", "r"); /* or use fopen to open a file */
int c; /* Nb. int (not char) for the EOF */
unsigned long newline_count = 1;
/* count the newline characters */
while ( (c=fgetc(fp)) != EOF ) {
if ( c == '\n' )
newline_count++;
putchar(c);
}
printf("\n %lu newline characters\n ", newline_count);
return 0;
}
答案 0 :(得分:3)
试试这个:
int main()
{
FILE *fp = fopen("sample.txt", "r"); /* or use fopen to open a file */
int c, lastchar = 0; /* Nb. int (not char) for the EOF */
unsigned long newline_count = 0;
/* count the newline characters */
while ( (c=fgetc(fp)) != EOF ) {
if ( c == 'n' && lastchar == '\\' )
newline_count++;
lastchar = c; /* save the current char, to compare to next round */
putchar(c);
}
printf("\n %lu newline characters\n ", newline_count);
return 0;
}
实际上,文字\n
是两个字符(一个字符串),而不仅仅是一个字符。所以你不能简单地将它比作一个角色。
修改强>
由于\n
是两个字符\
和n
,我们必须记住我们读入的最后一个字符,并检查当前字符是否为n
以及之前的字符字符是\
。如果两个测试均为真,则表示我们已将序列\n
放在文件中。