这明明只是一个输入函数啊!
C6031和C4996是啥意思啊?为啥还过时了啊? 你用的是vs吧因为vs安全级别更好一些,使用scanf()函数不检查边界,出现出现内存泄露,如: char a={'\0'}; scanf(“%s”,a),输入0123456789,分配5字节,读取了10字节,只读取前面一部分,后面一部分写到了其他空间;当使用scanf_s()时,需要指定读取大小,如char a,scanf_s("%s",a,10),规定读取空间大小。所以vs认为scanf不安全,故要求使用scanf_s等
解决方案
方法一:在程序最前面加#define _CRT_SECURE_NO_DEPRECATE;
方法二:在程序最前面加#define _CRT_SECURE_NO_WARNINGS;
方法三:在程序最前面加#pragma warning(disable:4996);
方法四:把scanf改为scanf_s;.
方法五:无需在程序最前面加那行代码,只需在新建项目时取消勾选“SDL检查”即可;
方法六:若项目已建立好,在项目属性里关闭SDL也行;
方法七:在工程项目设置一下就行;将报错那个宏定义放到 项目属性 -- C/C++-- 预处理器 -- 预处理器定义;
方法八:在 项目属性 -- c/c++ -- 命令行 添加:/D _CRT_SECURE_NO_WARNINGS 就行了。 910201513 发表于 2019-12-13 15:41
你用的是vs吧
因为vs安全级别更好一些,使用scanf()函数不检查边界,出现出现内存泄露,如: char a={' ...
#include<stdio.h>
long hanshu(int n);
int main()
{
int n;
int result;
scanf_s("%d", &n);
result = hanshu(n);
printf("%d", result);
}
int hanshu(int n)
{
int linshijieguo;
if (n == 0 || n == 1)
{
linshijieguo = 1;
}
else if (n < 0)
{ printf("n<0,input error!\n");
}
else
{
linshijieguo = hanshu(n - 1)*n;
}
}求大神为什么求不出正确的值;
用的vs2013
本帖最后由 910201513 于 2019-12-15 13:37 编辑
WFR 发表于 2019-12-14 18:24
#include
long hanshu(int n);
int main()
第一个问题:子函数声明和子函数定义的返回值结果不同
第二个问题:scanf_s的格式没写对
第三个问题:子函数没有返回值所以hanshu(n)不是你想要的值
修改后代码为#include<stdio.h>
int hanshu(int n);
int main()
{
int n;
int result;
scanf("%d", &n);
result = hanshu(n);
printf("%d", result);
}
int hanshu(int n)
{
int linshijieguo;
if (n == 0 || n == 1)
{
linshijieguo = 1;
}
else if (n < 0)
{
printf("n<0,input error!\n");
}
else
{
linshijieguo = hanshu(n - 1)*n;
}
return linshijieguo;
}
如果还有疑问,欢迎跟贴
也可加本人QQ讨论 910201513 发表于 2019-12-15 13:34
第一个问题:子函数声明和子函数定义的返回值结果不同
第二个问题:scanf_s的格式没写对
第三个问题 ...
输入20得到的就不是正确的结果
WFR 发表于 2019-12-15 20:05
输入20得到的就不是正确的结果
怎么就对了???求解!!!
新手!!!{:5_104:} 本帖最后由 910201513 于 2019-12-16 17:46 编辑
WFR 发表于 2019-12-15 20:09
怎么就对了???求解!!!
新手!!!
你这难道不是求阶乘吗?
20的阶乘超出了int的范围当然是错误的 910201513 发表于 2019-12-16 17:45
你这难道不是求阶乘吗?
20的阶乘超出了int的范围当然是错误的
该怎么解决呢???、
、、
WFR 发表于 2019-12-21 18:21
该怎么解决呢???、
使用 unsigned long long 类型绝对的够了
有64位精度 910201513 发表于 2019-12-22 14:11
使用 unsigned long long 类型绝对的够了
有64位精度
还可以这样???我还以为最长的就是long型呢
页:
[1]