zoukankan      html  css  js  c++  java
  • scanf_s获取参数,清空缓冲区,判断是否读取成功

    #include<stdio.h>
    
    int main() {
        char str[5];
        while (1) {
            printf("Please input:
    ");
            int rtn=scanf_s("%s", str, 5);
            if (rtn == 0) {
                printf("scanf_s failure!
    ");
                rewind(stdin);//windows平台下清空字符缓冲区。fflush(stdin)不建议使用,好像没有效果
            }
            else {
                printf("Your input:%s
    ", str);
            }
            printf("%d-----------------------------------------------
    ", rtn);
        }
        return 0;
    }

    如果是使用scanf注意内存越界,改变了其他变量的值。注意限制字符读取的长度。

    以下是运行结果:

    Please input:
    123456789
    scanf_s failure!
    0-----------------------------------------------
    Please input:
    1
    Your input:1
    1-----------------------------------------------
    Please input:
    11
    Your input:11
    1-----------------------------------------------
    Please input:
    111
    Your input:111
    1-----------------------------------------------
    Please input:
    1111
    Your input:1111
    1-----------------------------------------------
    Please input:
    11111
    scanf_s failure!
    0-----------------------------------------------
    Please input:
    111111
    scanf_s failure!
    0-----------------------------------------------
    Please input:

     如果清空缓冲区的那一行代码被注释,如下:

    #include<stdio.h>
    
    int main() {
        char str[5];
        while (1) {
            printf("Please input:
    ");
            int rtn=scanf_s("%s", str, 5);
            if (rtn == 0) {
                printf("scanf_s failure!
    ");
                //rewind(stdin);//windows平台下清空字符缓冲区。fflush(stdin)不建议使用,好像没有效果
            }
            else {
                printf("Your input:%s
    ", str);
            }
            printf("%d-----------------------------------------------
    ", rtn);
        }
        return 0;
    }

    则运行结果变成了

    Please input:
    123456789
    scanf_s failure!
    0-----------------------------------------------
    Please input:
    Your input:6789
    1-----------------------------------------------
    Please input:
    111111111111111111
    scanf_s failure!
    0-----------------------------------------------
    Please input:
    scanf_s failure!
    0-----------------------------------------------
    Please input:
    scanf_s failure!
    0-----------------------------------------------
    Please input:
    Your input:111
    1-----------------------------------------------
    Please input:

    最后一定要注意scanf_s的后面的长度虽然是5,但是只能接收4个字符,不然就会接收键盘输入失败。

    另外,scanf_s的第二个参数是变量的地址(数组名也是变量的地址),第三个参数是(unsigned int)的类型(也可以直接使用正整数)

  • 相关阅读:
    【网络流24题】方格取数问题(最大流)
    运维之思科篇——NAT基础配置
    NAT地址转换常用命令详解
    NAT(地址转换技术)详解
    Linux命令之grep用法详解:grep与正则表达式 [转]
    curl查询公网出口IP
    CentOS下安装Telnet服务
    Linux之Xinetd服务介绍
    上市公司年报发布时间是什么时候?
    jackson序列化字段字母大小写及字段名重复
  • 原文地址:https://www.cnblogs.com/kgtone/p/9570178.html
Copyright © 2011-2022 走看看