c - scanf() 函数的魔力?

标签 c input scanf

为什么运行这段代码并打印整个字符串?

#include <stdio.h>

void main()
{
    int a;
    while(a!='q')
    {
        scanf("%c",&a);
        printf("%c",a);
    }
}

输入除q之外的字符串,最后按回车键。现在您的字符串才会打印在屏幕上。为什么?

最佳答案

这里的问题不在于 scanf,而在于您的 printf 调用。

Printf 会缓冲输出,直到到达新行,因此程序在您 printf("\n"); 之前不会显示任何内容。 (当有人按 Enter 时也会发生这种情况,您将他们的返回输出到屏幕,这会导致缓冲区刷新。)

如果您不想使用 printf("\n") 分解输出,则可以使用 fflush(stdout) 手动刷新缓冲区不打印任何内容,如下所示:

int a;
while(a!='q')
{
    scanf("%c",&a);
    printf("%c",a);
    fflush(stdout);
}

关于c - scanf() 函数的魔力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973449/

相关文章:

html - 在 Angular 中,属性值在输入字段中不起作用

html - 如何制作一个带有文字+图片的提交按钮?

c - 使用 fscanf 读取 2 int 和\n - 有什么想法?

c - 验证生成的封装库

c - 了解开关条件下的寄存器用法

c++ - "read_format"结构的 "perf_event_attr"属性的选项到底是什么?

c - 在 C 中读取文件内容,跟踪新行

c - 哪个更快 - 排序或乘以一个小的元素数组?

css - 将 margin-left 应用于 html 输入按钮的所有文本行

c - Matlab - 从文件读取数据,同时忽略nan行