#include <stdio.h>
int main()
{
char c;
while ((c=getchar()) != EOF)
putchar(c);
}
为什么当我输入诸如“ omar”之类的文本时,将char打印“ omar”放回去。难道它不应该重复打印'o',因为getchar仅会采用第一个字符。我知道我在某些事情上错了可能是因为我不知道getchar或putchar到底是如何工作的,所以有人可以解释一下它们是如何工作的。另一个问题是为什么getchar和putchar在没有while循环但在while循环内部行为正常的情况下工作正常。
答案 0 :(得分:3)
为什么getchar()函数在循环中会有所不同?
我想问你一个问题,为什么Select * from
favorite_user_cellphone uc
where user_id = 234 and favorited_at is not null And cellphone_id not in
(
Select cellphone_id from
favorite_user_cellphone uc
where user_id = 234 and unfavorited_at is not null)
的工作原理与您的预期不同 ,而不是与其他情况下的差异。如果您实际上是说后者,那么答案将是“不是”。
但是,当然,无论是通过getchar()
还是其他I / O函数从流中读取字符,都会将其从流中删除。 getchar()
如果不这样做,将不会很有用。因此,如果您反复调用它,则会依次读取(并删除)每个字符,直到并且除非消耗了所有可用字符。您可以通过用行中的多个getchar()
调用替换程序中的循环来进行测试。
当然,您的循环确实反复调用它。循环控制表达式getchar()
是在循环的每次迭代之前求值的,它涉及调用(c=getchar()) != EOF
(与使用该函数先前返回的值相反)。
请注意,在完全不同的音符上,getchar()
返回类型为getchar()
的结果,恰好它可以返回至少一个值int
,该值位于类型EOF
的范围。如果将结果转换为类型unsigned char
,则可能有一个实际输入值会误认为EOF,或者永远不会检测到EOF,具体取决于char
是带符号的还是无符号的。为了可靠且可移植地检测文件的结尾,必须将返回值 处理为char
,而不是int
。