如何在C语言解决printf与scanf先后执行的问题

2023-10-09  本文已影响0人  爱学习的蹭蹭

如何在C语言解决printf与scanf先后执行的问题

解决方法用

fflush(stdout);

我们前面有一个scanf函数,会把空白符跟换行符忽略并放入缓冲区,到了第二个scanf函数就会执行 而scanf遇到换行符就会停止,所以就会导致成这种结果,所以我们最好清除掉缓冲区内的数据, 在第一个scanf读取完毕后,记得用清除缓冲区函数把未读取的空白符和换行符丢掉,可以用getchar也可以用setbuf(stdin, NULL);函数,都可以

代码案例

#include "stdio.h"

void main() {
    printf("回车输入两个数字进行相加: \n");

    //此行代码是解决先执行printf再去执行scanf打印.
    fflush(stdout);
    int num1, num2;

    //定义的是一个字符串,取值的时候就要用 %s
    char username[100];

    /**
     * 第一个 scanf
     */

    int result = scanf("%d%d", &num1, &num2);
    if (result != 2) {
        printf("Invalid input!\n");
        return;  // return with error code
    }
    int sum = num1 + num2;
    printf("求和: %d + %d  = %d \n\n", num1, num2, sum);

    /**
    * 第二个 scanf
    */

    //解决空白顺序输入打印问题.
    setbuf(stdin, NULL);
    printf("请输入一个用户名\n");

    fflush(stdout);
    scanf("%s",username);
    printf("用户名为: %s\n\n", username);


    //----------------------------
    setbuf(stdin, NULL);

    char check_db;
    printf("请输入条件进行选择数据库(a是Book数据库,b是Store数据库,c是Good数据库): \n");
    //解决先后顺序
    fflush(stdout);


    /**
    * 第三个 scanf
    */
    scanf("%c",&check_db);

    switch (check_db) {
        //case必须常量,不能是变量值.定义一个char a='a'在此在case a就会报错
        case 'a':
            printf("当前数据库是 Book \n");
            break;
        case 'b':
            printf("当前数据库是 Store \n");
            break;
        case 'c':
            printf("当前数据库是 Good \n");
            break;
        default:
            printf("找不到对应数据库 \n");
    }
}

总结

C的初学者,仅供个人参考,不做详解,个人学习笔记,可以供任何人批评指导。_,学习都是按个人方式去学习。

上一篇下一篇

猜你喜欢

热点阅读