scanf()函数的魔力?

时间:2010-06-04 10:57:32

标签: c input scanf

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

#include <stdio.h>

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

输入q以外的字符串,最后按回车键。只有现在你的字符串才会在屏幕上打印出来。为什么呢?

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

对于初学者来说,该代码无法编译 - print不是C中的函数,printf是您正在寻找的一个。

至于我认为你在问什么,我不知道为什么你要打印你阅读的每个字符,直到你读q;这似乎有点无意义。

答案 2 :(得分:0)

首先,您需要将a定义为char类型:

char a;

当你点击回车时,while循环将运行你输入的多少个字符。试试看看发生了什么:

char a = 0;
int i = 0;
while(a!='q')
{
    scanf("%c",&a);
    printf("%d:%c",i++,a);
}