假设一个文本文件中有hellon 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 charactersn ", newline_count);
return 0;
}
试试这个:
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 charactersn ", newline_count);
return 0;
}
实际上,文字n
是两个字符(一个字符串),而不仅仅是一个。所以你不能简单地把它当作一个角色来比较。
编辑由于n
是两个字符,即和
n
,我们必须记住我们读入的最后一个字符,并检查当前字符是否为n
,前一个字符是否为。如果两个测试都为真,则意味着我们已经在文件中找到了序列
n
。