鱼C论坛

 找回密码
 立即注册
查看: 1093|回复: 5

[已解决]代码运行警告,求指点下

[复制链接]
发表于 2021-10-19 14:12:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个十位数求和以及求平均值代码。运行时会有警告,不知道我哪个步骤做的不对,求指出。
(ps 代码能运行的,只是运行输出结果后警告)

严重性        代码        说明        项目        文件        行        禁止显示状态
警告        C4996        'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.        蓝桥杯试题集        D:\Mycode\蓝桥杯试题集\蓝桥杯试题集\求和求平均值.c        18       

这里警告虽然是scanf,但我看到的红标指在了函数调用这一行。
#include<stdio.h>

int i;

void fun(float *s) {
        float sum = 0;
        for (i = 0; i < 10; i++) {
                sum += s[i];
        }
        printf("%g\n", sum);
        float avg = sum / 10;
        printf("%g", avg);
}

int main() {
        float s[9];
        for (i = 0; i < 10; i++) {
                scanf("%f", &s[i]);
        }
        fun(s);
        return 0;
}
最佳答案
2021-10-19 14:47:43
我觉得应该是这里
float s[9];
把float s[9];改成float s[10];
应该是你申请的数组长度为10,然后又输入了10个数,导致数组没有存放表示结束的‘\0’的位置导致警告数据不安全
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-19 14:43:56 | 显示全部楼层
插个眼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-19 14:47:43 | 显示全部楼层    本楼为最佳答案   
我觉得应该是这里
float s[9];
把float s[9];改成float s[10];
应该是你申请的数组长度为10,然后又输入了10个数,导致数组没有存放表示结束的‘\0’的位置导致警告数据不安全
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-19 14:59:41 | 显示全部楼层
第 10 和 12 行:%g 为64位的浮点数(double),而你的 sum 是 float
第 16 行:定义数组 s 大小为 9,但是你输入 10 个数据(执行代码时候,可能没有问题,也可能有问题,在于数组内存位置 +1 的地方有没有被运用,如果是空,则没事,如果已被运用,则报错)
报错:C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 其实和你的编辑器有关,必须设定,或者可以试试:
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
我的代码供参考:
#include <stdio.h>

int main()
{
    float sum;
    
    for(int i = 0; i < 10; i++){
        float a;
        scanf("%f", &a);
        sum += a;
    }
    
    printf("%.2f\n%.2f", sum, sum/10);

    return 0;
}
1.2 2.2 3.2 4.2 5.2 6.2 7.2 8.2 9.2 10.2
57.00
5.70
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-20 15:07:00 | 显示全部楼层
村里小黑 发表于 2021-10-19 14:47
我觉得应该是这里
float s[9];
把float s[9];改成float s[10];

确实,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-20 15:08:12 | 显示全部楼层
傻眼貓咪 发表于 2021-10-19 14:59
第 10 和 12 行:%g 为64位的浮点数(double),而你的 sum 是 float
第 16 行:定义数组 s 大小为 9,但 ...

问题出在于数组长度,改了没事了。不过你说的其他小问题我也好好反省下,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表