首页 > 解决方案 > 如何在 getchar()!=EOF 上获取最后一个字符

问题描述

有没有办法在使用时获取 EOF 之前的最后一个元素getchar()

例如,我有一条文字说“嘿,人们”

检查该文本中最后一个字符的条件是什么(在我们的示例 e 中)。我的想法如下,但我不确定 if 条件应该是什么。

//pseydocode

int c;
while(c=getchar() != EOF)
    if(c==EOF-1) //assuming EOF is the end EOF -1 would be the last  character.
        if(c==O) print O;
        else if(c==P) print P;
        else if (c==e) print e;

我想检查最后一个字符,如果它是一个特定的字母来打印它。

谢谢你。

标签: c

解决方案


没有迹象表明刚刚返回的字符getchar是最后一个可用字符。要打印之前的最后一个字符EOF,您必须记住 return from getchar。当EOF返回时,则打印之前记住的字符。

例如,此代码打印流的最后一个字符:

#include <stdio.h>

int main(void)
{
    int c, previous = EOF;

    while (1)
    {
        c = getchar();
        if (c == EOF)
            break;
        previous = c;
    }

    if (previous == EOF)
        printf("There were no characters in the stream.\n");
    else
        printf("The last character was %c.\n", previous);
}

当您尝试上述操作时,您可能会发现最后一个字符是换行符,'\n'.

一般来说,C 实现不可能知道刚刚返回的字符是最后一个字符。例如,输入可能来自终端,而用户刚刚输入了一个字符,该字符getchar()返回。在这一点上,我们不知道用户接下来会做什么——他们可能会键入另一个字符,或者他们可能会键入和文件结束指示(如在 Unix 系统中按两次 control-D)。因此,刚刚获得一个角色,我们不知道接下来是另一个角色还是EOF.


推荐阅读