初学者,在代码出现了问题。关于C的程序。

问题遇到的现象和发生背景 编程软件Studio 2019,代码是C语言书上学习copy的。在Scanf_s出现问题。在书的第九和第十章出现了同样的问题
问题相关代码,请勿粘贴截图

img

运行结果及报错内容

img

多次修改成功运行代码

img


getchar()返回值的问题可以忽略。其他改动还是挺多的。
fopen后面的filename上加上" ",标准函数,此处不会向一楼说的影响运行

img

scanf_s输入字符串%s的时候需要加一个参数表明缓冲区大小。

scanf_s("%s",filename, sizeof(filename));

fopen需要改成fopen_s,或者在第一行添加#define _CRT_SECURE_NO_WARNINGS禁用所有scanf_s(),fopen_s()之类的错误信息。

第10行如果用fopen的话需要写成

if ((fp=fopen(filename, "w"))==NULL)

==的优先级高于=,必须要加括号,filename是变量名,不需要加双引号。

改后

img


问题

img

getchar返回值被忽略,怎么解决.
再改

img

存在的问题

img

这个是因为版本过高,vs2019觉得原来的scanf不安全更换成s_scanf了,要改回去就去常规的检验里面把SLD检查关掉就好了。之前我也遇到过,就是这样解决的。

头文件加上#include <string.h>可以运行getchar()函数,当fopen换成fopen_s则无法完成编译。不换,则可以实施fopen之前的步骤,之后的仍无法运行。
没改的

img


代码

img


问题提示

img

fopen改fopen_s

img