fget(c) - 保存前一个字符时扫描下一个字符

时间:2016-01-04 11:53:55

标签: c file-io fgetc

我正在尝试创建一个读取文件的程序,并计算以'a'开头的单词数。

我的想法是:

  • 扫描角色,看它是否是字母。

  • 如果不是,那么我会知道下一个字是一个新词

  • 扫描下一个字符以检查它是'a'还是'A'

我想知道的是,如果有一种简单的方法可以使用fgetc()扫描下一个字符,同时还要记住上一个字符。

类似的东西:

char letter;
int aCount = 0;

while ((letter = fgetc(testFile)) != EOF) {

    if (isalpha(letter) == false && ('nextCharacter' == 'a' || 'nextCharacter' == 'A')) {

        aCount++; 
    }
}

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

您的代码存在一些问题:

    从文件中读取的
  • 字节应存储在int变量中,以容纳EOF和所有无符号字符值。如果将其存储到char变量中,则无法可靠地检查EOF
  • 您应保存前一个字节以测试单词开始,并使用letter检查当前单词是以'a'还是'A'开头。

以下是更正后的版本:

int prev = ' '; // pretend there is a non letter before the first byte.
int c;
int aCount = 0;

while ((c = fgetc(testFile)) != EOF) {

    if (!isalpha(prev) && (c == 'a' || c == 'A')) {
        aCount++; 
    }
    prev = c;
}
printf("there are %d words starting with 'a'\n", aCount);