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);
具体原因还需再研究。