交织putchar()和printf()函数
这是在K&R中给出的一个声明,printf()和putchar()可以交错使用。 如果它是真的,那么为什么下面的代码不提供所需的输出: -
#include"stdio.h" void main() { char c,d; printf("Enter the first charactern"); scanf("%c",&c); printf("%cn",c); printf("Enter the second charactern"); d=getchar(); putchar(d); printf("n"); }
每当我执行这个程序时,输出如下: -
Enter the first character a a Enter the second character
这是输出。 如果我用getchar()替换printf()和getchar()替换scanf(),也会发生这种情况。 为什么这是开心?
第一个scanf
会在输入缓冲区中留下由Return按钮产生的n
,因此您的第二个getchar()
将获取此n
而不是从用户获取另一个字符。
如果你想跳过这个换行符,你可以指示scanf
“吃”它:
scanf("%cn",&c);
或者通过调用getchar()
直接“吃掉它”:
scanf("%c",&c);
getchar();
(请注意,这些不完全相同,因为第二个片段将会吃掉缓冲区中发生的任何字符,而第一个片断只会在它是n
删除它)
你可以像这样纠正你的代码:
#include <stdio.h>
int main() {
char c, d;
printf("Enter the first charactern");
scanf("%cn", &c); // Ask scanf to read newline and skip
printf("%cn", c);
printf("Enter the second charactern");
d = getchar();
putchar(d);
printf("n");
return 0;
}
你得到两个a,因为你输入了一个与控制台相呼应然后打印出来的a。
链接地址: http://www.djcxy.com/p/72167.html