使用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;
我想检查最后一个字符以及是否要打印一个特定字母。
谢谢。
答案 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
之前的最后一个字符。