• scanf_s 可能会出现的死循环


                                       

     VS2015中提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符。

      scanf_s("%s",d,20);才是正确的,有这个参数20使准确性提高。

      scanf_s("%c   %c", &a,1, &b, 1);//每个变量后加一个数值指定长度.

    每次输入完成最好用getchar清空标准输出,否则容易出现死循环.

    #include <stdio.h>

    #include<stdlib.h>

    #include<Windows.h>

    int main()

    {

      int i, j, ret = 0;

      char a, b, c;

      do {

        printf("Begin to Enter: ");

        //fflush(stdin);  //测试发现该函数无作用

        ret = scanf_s("%d        %d   %c   %c", &i, &j, &a, 1, &b, 1);

            printf("i=%d,j=%d,a=%c,b=%c ", i, j, a, b);  

        printf("Ret=%d ",ret);

        Sleep(2000);

        while ((c = getchar()) != ' ' && c != EOF)//如果没有getchar下面的输入方式会进

        printf("======%c ",c);               // 入死循环.

        //system("pause");

      } while (i);

      return 0;

    }

     

    原因分析:如果不用getchar清空多余的字符JKKK,进入下一轮循环时, scanf_s会直接读取缓冲区而不去等待用户输入,此时读到的值JKKK不能匹配给i(%d),scanf_s出错返回0,i值一直是1,出现死循环.

    不是尽力而为,而是全力以赴.
  • 相关阅读:
    [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用)-布布扣-bubuko.com
    给 Linux 系统“减肥”,系统垃圾清理_系统安装与配置管理_Linux Today
    命令行选项
    SQL 优化
    精通initramfs构建step by step
    常用正则表达式
    Chrome_浏览器开发人员工具
    按键精灵
    CMD命令大全
    50种折纸方法
  • 原文地址:https://www.cnblogs.com/yang666/p/6004239.html
Copyright © 2020-2023  润新知