关于C26446的问题,优先使用 gsl::at() 而非未选中的下标运算符(bounds.4)。,如何解决?

警告 C26446 优先使用 gsl::at() 而非未选中的下标运算符(bounds.4)。
注;

#include 
int main(void)
{
    struct emp {
        char name[10];
        double jbgz, jt, jj, zc;
    };
    struct emp s[10];
    int i, n;

    printf("n=");
    scanf_s("%d", &n);
    for (i = 0; i < n; i++) {
        scanf_s("%s%lf%lf%lf%lf", s[i].name,10, &s[i].jbgz, &s[i].jt,& s[i]. jj, &s[i].  zc);
    }
    for (i = 0; i < n; i++) {  /* 调试时设置断点 */
        printf("%s:%.2f\n", s[i].name, s[i].jbgz + s[i].jt + s[i].jt - s[i].zc);
    }

    return 0;
}


scanf_s("%s%lf%lf%lf%lf", s[i].name,10, &s[i].jbgz, &s[i].jt,& s[i]. jj, &s[i].  zc);

1.这个函数做下优化,每个参数之间用逗号隔开,不然输入的数据会有问题;
2.这里面这个10应该是写错了吧!
修改如下所示:

scanf_s("%s,%lf,%lf,%lf,%lf", s[i].name, &s[i].jbgz, &s[i].jt,& s[i]. jj, &s[i].  zc);

printf里也修改下,将后面的参数用小括号扩上。

printf("%s:%.2f\n", s[i].name,( s[i].jbgz + s[i].jt + s[i].jt - s[i].zc));

  • 这篇博客: GSL 系列 1 — 数学函数中的 正负测试 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • GSL_SIGN(X): 大于等于 0 为 1,小于 0 为 -1

    宏定义:

    // gsl_math.h
    #define GSL_SIGN(x)    ((x) >= 0.0 ? 1 : -1)