zoukankan      html  css  js  c++  java
  • PTA 代码注意事项

    1.慎用或不用语句 rewind(stdin);

    rewind(stdin); 的作用是将键盘文件当前位置指针指向文件头(),起到清空键盘缓冲区中无用字符的作用。
    在VS2017中,使用scanf("%d ", &N); 语句,跟踪调试发现要输入两次字符再回车后,才会退出该语句。
    在VS2017中,使用scanf("%d", &N); 语句,这种不加换行符的写法,只需输入一次回车后即可退出,但回车这个符号被放进缓冲区,作为下一次输入。
    通过搜索引擎查找答案时,找到一个认为比较准确的解释:
    当按照scanf("%c ", &m)这种形式书写时,相当于你输入结束之后,缓冲区的数据被立即读取且被清空,缓冲区为空,scanf不退出,当你再输入一个字符后,缓冲区不空,再次回车后scanf退出。而变量的值,是你第一次输入的值。
    于是在VS2017中一次输入后加入rewind(stdin);来清空缓冲区。

    scanf("%d", &N);
    rewind(stdin);
    

    这样在VS2017中调试就一切正常了。
    但是这个代码放进PTA后,便出现出现段错误或答案错误或运行超时的情况。再回到VS2017中跟踪调试始终发现不了问题。
    将老师给出的标准代码进行对比后,发现输入语句写法不一致,遂进行修改
    将上述的两行输入代码,改为下面一行,则一切正常,顺利通过。

    scanf("%d
    ", &N);
    

    具体原因还需再研究。

  • 相关阅读:
    runc create container 流程分析
    cri-o pod 创建源码分析
    hyperstart 容器创建流程分析
    MIT jos 6.828 Fall 2014 训练记录(lab 4)
    python 邮件发送 脚本
    jvm: 理解gc日志
    jvm:垃圾收集器
    GC 垃圾收集
    jvm结构
    Java transient关键字使用小记
  • 原文地址:https://www.cnblogs.com/TangYJHappen/p/13297232.html
Copyright © 2011-2022 走看看