交织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

上一篇: Interleaving of putchar() and printf() functions

下一篇: C++: accessing private fields and function from main