c - 如何在 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;
我想检查最后一个字符,如果它是一个特定的字母来打印它。
谢谢你。
解决方案
没有迹象表明刚刚返回的字符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
.