fflush(stdin) 清除Scanf输入缓冲区

来源:互联网 发布:香香教你当网络歌手 编辑:程序博客网 时间:2024/05/29 02:57

scanf循环输入带来的问题:

#include<stdlib.h>#include<stdio.h>int main(int argc, char* argv[]){    int ival;    float fval;    double dval;    while (1)    {        scanf("%d%f%lf", &ival, &fval, &dval);        printf("%d %f %lf \n", ival, fval, dval);    }    system("pause");    return 0;}

运行结果:

123 4.56 7.89001      //第一次输入123 4.560000 7.890010 //第一次输出345 aaa 3.4456        //第二次输入345 4.560000 7.890010//循环输出345 4.560000 7.890010//循环输出345 4.560000 7.890010//循环输出345 4.560000 7.890010//循环输出345 4.560000 7.890010.....................

因为aaa的一次错误输入,Scanf不能正常完成循环输入,prinf一直循环输出,为保证循环正常进行每次输入前添加“fflush(stdin);”以清除scanf输入缓冲区:

#include<stdlib.h>#include<stdio.h>int main(int argc, char* argv[]){    int ival;    float fval;    double dval;    while (1)    {        fflush(stdin); //清除缓存区        scanf("%d%f%lf", &ival, &fval, &dval);        printf("%d %f %lf \n", ival, fval, dval);    }    system("pause");    return 0;}

运行结果:

123 4.56 7.89001     //第一次输入123 4.560000 7.890010//第一次输出345 aaa 3.4456       //第二次输入345 4.560000 7.890010//第二次输出111 2.22 3.33333     //第三次输入111 2.220000 3.333330//第三次输出。。。。。。。。。      //第四次输入111 2.220000 3.333330//第四次输入//循环恢复正常

直接将其添加至while循环中:

#include<stdlib.h>#include<stdio.h>int main(int argc, char* argv[]){    int ival;    float fval;    double dval;    while (fflush(stdin), set = scanf("%d%f%lf", &ival, &fval, &dval) != EOF)    {        printf("%d %f %lf \n", ival, fval, dval);    }    system("pause");    return 0;}
0 0
原创粉丝点击