putchar()和printf()函数的交错

kus*_*sur 0 c

这是K&R给出的一个声明,printf()和putchar()可以交错.如果是,那么为什么以下代码没有提供所需的输出: -

#include"stdio.h"
void main()
{
    char c,d;
    printf("Enter the first character\n");
    scanf("%c",&c);
    printf("%c\n",c);
    printf("Enter the second character\n");
    d=getchar();
    putchar(d);
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

每当我执行这个程序时,输出如下: -

Enter the first character
a
a
Enter the second character


这是输出.如果我用putchar()替换printf()和用getchar()替换scanf(),也会发生这种情况.这为什么开心呢?

Mat*_*lia 5

第一个scanf在输入缓冲区中留下\nReturn压力产生的结果,因此您的第二个getchar()将获得此\n而不是从用户获取另一个字符.

如果你想跳过那个换行符,你可以指示scanf"吃掉"它:

scanf("%c\n",&c);
Run Code Online (Sandbox Code Playgroud)

或直接打电话给"吃掉" getchar():

scanf("%c",&c);
getchar();
Run Code Online (Sandbox Code Playgroud)

(请注意,这些并不完全等效,因为第二个片段会吃掉碰巧在缓冲区中出现的任何字符,而第一个片段只有当它是a时才会删除它\n)

  • @KingsIndian:这不是K&R代码; 他们永远不会写`void main()`.从这些问题来看,K&R只表示对'printf()`和`putchar()`的调用可以交错,他们可以这样做,正如(有缺陷的)程序所证明的那样.问题不在于产出; 这是输入. (3认同)