printf()输出和scanf()输入顺序不对

为什么我的第一行printf()输出语句是在我输入完scanf()之后才显示?


#include <stdio.h>

int main() {

    int  a,b;
    printf("请输入不多于五位的正整数\n");
    scanf("%d",&a);

    while(a>0){
        a=a/10;
        b++;
    }
    printf("一共是%d\n",b);
    return 0;
}

img

解决方式是在printf()与scanf()之间加上fflush(stdout)。供参考:

#include <stdio.h>
int main() {

    int  a,b;
    printf("请输入不多于五位的正整数\n");
    fflush(stdout);              //插入
    scanf("%d",&a);

    while(a>0){
        a=a/10;
        b++;
    }
    printf("一共是%d\n",b);
    return 0;
}

应该是你的内置输入输出窗口的问题,你的代码没问题。

【以下回答由 GPT 生成】

这个问题是由于C语言中的标准输入和标准输出是使用缓冲区的原因所导致的。

在C语言中,printf()输出语句和scanf()输入语句都是与标准输入和标准输出相关联的。标准输入通常是键盘,标准输出通常是屏幕。

当你执行scanf()输入语句时,它会等待你输入数据,然后把数据存储在变量a中。输入的数据会先被存储在输入缓冲区中。

接下来,当你执行printf()输出语句时,它会从输出缓冲区中获取数据并显示在屏幕上。但是在输入缓冲区中还有剩余的数据,printf()会等待直到输入缓冲区中的数据全部被取出后才会显示。

为了解决这个问题,你可以使用fflush()函数来清空输入缓冲区。fflush(stdin)会清空输入缓冲区,但是这是非标准的用法,在某些编译器上可能无法正常工作。

一个更标准的解决方法是使用一个空的getchar()语句来清空输入缓冲区。下面是修改后的代码:

#include <stdio.h>

int main(){

    int a,b;
    printf("请输入不多于五位的正整数\n");
    scanf("%d",&a);

    getchar(); // 清空输入缓冲区

    while(a>0){
        a=a/10;
        b++;
    }
    printf("一共是%d\n",b);
    return 0;
}

scanf()之后添加了一个getchar()语句来清空输入缓冲区。这样在执行printf()之前,输入缓冲区就已经被清空,printf()就能正常显示了。

请注意,根据C语言标准,对输入缓冲区使用getchar()来清空是可移植的。然而,对输出缓冲区使用fflush(stdout)是不可移植的。因此,在这种情况下使用getchar()来清空输入缓冲区是更好的选择。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^