在使用clion中,scanf先与上方的printf执行,求解


#include <stdio.h>
//结构体
struct student{
    int num;
    char name[20];
    char sex;
    int age;
};
int main() {
    struct student s={100,"zz",'M',20};
    printf("%d %s %c %d\n",s.num,s.name,s.sex,s.age);
    scanf("%d%s %c%d",&s.num,s.name,&s.sex,&s.age);
    printf("%d %s %c %d\n",s.num,s.name,s.sex,s.age);


    return 0;
}

img

该回答引用ChatGPT

在 C 语言中,printf 函数输出的结果会先缓存在内存中,直到遇到以下情况之一时才会输出:

遇到换行符 \n 或者输出缓冲区已满时;
使用 fflush 函数刷新缓冲区;
程序结束时自动刷新缓冲区。
因此,在您的代码中,printf 函数的输出结果并不会立即输出到屏幕上。当程序执行到 scanf 函数时,会等待用户的输入,直到用户输入完成并按下回车键时,scanf 函数才会返回。此时,printf 函数缓冲区中的内容才会被刷新到屏幕上,同时 scanf 函数读取用户输入的内容。

#include <stdio.h>

//结构体
struct student{
    int num;
    char name[20];
    char sex;
    int age;
};

int main() {
    struct student s={100,"zz",'M',20};
    printf("%d %s %c %d\n",s.num,s.name,s.sex,s.age);
    scanf("%d%s %c%d",&s.num,s.name,&s.sex,&s.age);
    printf("%d %s %c %d\n",s.num,s.name,s.sex,s.age);

    return 0;
}