#include <stdio.h>
int main ()
{
int c;
while ((c = getchar ()) != EOF)
{
putchar (c);
printf ("*");
}
return 0;
}
当我运行这个程序时,我得到的输出如下
qwerty
q * w * e * r * t * y *
*
#我不明白最后一个“*”是如何打印的。
与putchar()的返回有关
。那么 putchar() 函数实际上是如何返回的。我知道它在达到 EOF 后返回,因此在这种情况下,它不会打印任何内容,并且 printf("*")
将被执行。但问题是,为什么最后一个 *
会在下一行中打印。是不是像 putchar()
返回并将打印指针移动到新行?
我克服这个疑问的一个理论是,如果我在输入后不按“回车”,则不会打印 *
。但它再次产生了一个问题,即如何在不按 Enter 的情况下获得输出(在给出输入后)?为什么最后一个 *
是由于按“enter”键而出现的?
最佳答案
当您输入“qwerty”并按 Enter 键时,新行字符 \n
会附加到输入中。因此,程序的输入将是:
"qwerty\n"
^^
当循环处理最后一个(换行)字符时,即打印的 \n
字符,它实际上将光标移动到下一行,并在其后打印最后一个星号。
为了不随输入一起获取尾随换行符,您可以在 while
循环条件中添加对换行符的检查:
while ((c = getchar ()) != EOF && c != '\n')
或者,您可以在输入后给出文件结束EOF
字符,而不是按回车键。对于 EOF
,在 Unix 上按 Control+D,在 Windows 上按 Control+Z。
关于c - 为什么这个程序的输出中多了一个 "*"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51454979/