zoukankan      html  css  js  c++  java
  • 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,出现死循环.

    不是尽力而为,而是全力以赴.
  • 相关阅读:
    CSS布局--坑(2)
    CSS布局--坑(1)
    微信小程序wx:for 循环中item的keng
    初体验小程序Vue交互
    vue中数组变动更新检测
    【vue】v-if和v-show的区别
    babel把ES6转化为ES5的时候报错
    Vue.js大总结
    性能测试完整流程(二)
    性能测试完整流程(一)
  • 原文地址:https://www.cnblogs.com/yang666/p/6004239.html
Copyright © 2011-2022 走看看