云时千山 发表于 2019-12-13 14:52:57

这明明只是一个输入函数啊!

C6031和C4996是啥意思啊?为啥还过时了啊?

910201513 发表于 2019-12-13 15:41:04

你用的是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 就行了。

WFR 发表于 2019-12-14 18:24:18

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:34:35

本帖最后由 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讨论

WFR 发表于 2019-12-15 20:05:47

910201513 发表于 2019-12-15 13:34
第一个问题:子函数声明和子函数定义的返回值结果不同
第二个问题:scanf_s的格式没写对
第三个问题 ...

输入20得到的就不是正确的结果

WFR 发表于 2019-12-15 20:09:01

WFR 发表于 2019-12-15 20:05
输入20得到的就不是正确的结果

怎么就对了???求解!!!
新手!!!{:5_104:}

910201513 发表于 2019-12-16 17:45:00

本帖最后由 910201513 于 2019-12-16 17:46 编辑

WFR 发表于 2019-12-15 20:09
怎么就对了???求解!!!
新手!!!

你这难道不是求阶乘吗?
20的阶乘超出了int的范围当然是错误的

WFR 发表于 2019-12-21 18:21:01

910201513 发表于 2019-12-16 17:45
你这难道不是求阶乘吗?
20的阶乘超出了int的范围当然是错误的

该怎么解决呢???、


、、





910201513 发表于 2019-12-22 14:11:49

WFR 发表于 2019-12-21 18:21
该怎么解决呢???、




使用 unsigned long long 类型绝对的够了
有64位精度

WFR 发表于 2019-12-26 20:47:01

910201513 发表于 2019-12-22 14:11
使用 unsigned long long 类型绝对的够了
有64位精度

还可以这样???我还以为最长的就是long型呢
页: [1]
查看完整版本: 这明明只是一个输入函数啊!