如何在getchar()上获取最后一个字符!= EOF

时间:2019-02-14 14:24:28

标签: c

使用getchar()时是否有任何方法可以获取EOF前的最后一个元素?

例如,我有一句话 “嘿  人”

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

//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;

我想检查最后一个字符以及是否要打印一个特定字母。

谢谢。

3 个答案:

答案 0 :(得分:3)

没有迹象表明刚从getchar返回的字符是最后一个可用字符。要打印EOF之前的最后一个字符,必须记住从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

答案 1 :(得分:1)

您必须编写代码以记住EOF之前的最后一个字符(如果有的话)。

int c;
int lc = EOF;
while((c=getchar()) != EOF) {
   lc = c;
}

//here lc will hold the last character read before EOF,
//or it will also be EOF if no characters got read at all.

请注意,您的原始条件是while(c=getchar() != EOF),这是不正确的-评估为while(c=(getchar() != EOF)),您必须写while((c=getchar()) != EOF

答案 2 :(得分:1)

char c; 
int tmp = 0; 
while(tmp != EOF) 
{ 
  c = (char)tmp; 
  tmp=getchar(); 
} 

c在输入为空的情况下变为0(空终止符),否则为EOF之前的最后一个字符。