a327904410 发表于 2021-10-19 14:12:54

代码运行警告,求指点下

一个十位数求和以及求平均值代码。运行时会有警告,不知道我哪个步骤做的不对,求指出。
(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;
        }
        printf("%g\n", sum);
        float avg = sum / 10;
        printf("%g", avg);
}

int main() {
        float s;
        for (i = 0; i < 10; i++) {
                scanf("%f", &s);
        }
        fun(s);
        return 0;
}

hujiamiao1990 发表于 2021-10-19 14:43:56

插个眼

村里小黑 发表于 2021-10-19 14:47:43

我觉得应该是这里
float s;
把float s;改成float s;
应该是你申请的数组长度为10,然后又输入了10个数,导致数组没有存放表示结束的‘\0’的位置导致警告数据不安全

傻眼貓咪 发表于 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

a327904410 发表于 2021-10-20 15:07:00

村里小黑 发表于 2021-10-19 14:47
我觉得应该是这里
float s;
把float s;改成float s;


确实,学到了{:10_323:}

a327904410 发表于 2021-10-20 15:08:12

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

问题出在于数组长度,改了没事了。不过你说的其他小问题我也好好反省下,感谢{:10_323:}
页: [1]
查看完整版本: 代码运行警告,求指点下