scanf_s关于数组的使用问题

img

img


就是我需要修改三门课的成绩要是像上图这样不具体指明就只会修改第一门课的成绩。

img

img


要是具体指明运行后又发生这种错误,该怎么办,从网上搜的都是教怎么输入整个数组,而我这是要修改数组中每个元素,有没有人能看看?

结构体里成绩数组定义应这么改:

img


修改成绩函数里这么改:

img

int score[3];
这样才能放下3个数
&(p->score[0]),&(p->score[1]),&(p->score[2])
scanf_s最后的2去掉,字符串的才需长度,你这个整数不需要,注意取地址符号

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7638194
  • 这篇博客你也可以参考下:scanf循环接收不确定数量的数据,并存入整型数组中
  • 除此之外, 这篇博客: c语言使用scanf_s输入时,保存的内容是中文乱码的解决方案中的 当输入 中文 时,保存的结果每次都不一样(在这个代码之前做了个相同的循环,重复保存,每次保存的结果都不一样) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

  • 您还可以看一下 传智老师的2016年c语言教程第3天课程中的 07 使用scanf函数一次接收输入多个数据小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以使用循环结构和指针来修改数组中的多个元素的值。具体实现步骤如下:

    1. 定义一个数组和一个指向该数组的指针;

    2. 使用scanf_s()函数循环读入多个输入值,以指针的方式逐个赋值给数组元素;

    3. 输出数组元素的值,检查更改是否成功。

    示例代码如下:

    #include <stdio.h>
    
    #define N 3 // 定义数组元素个数
    
    int main()
    {
        int a[N];
        int *p = a; // 定义指针指向数组首元素
    
        for (int i = 0; i < N; i++) {
            printf("请输入第 %d 个元素的值:", i+1);
            scanf_s("%d", p+i); // 逐个赋值给数组元素
        }
    
        printf("数组元素的值为:");
        for (int i = 0; i < N; i++) {
            printf("%d ", *(p+i)); // 逐个输出数组元素的值
        }
        printf("\n");
    
        return 0;
    }
    

    如果出现只修改第一个元素的情况,很可能是由于scanf_s()函数格式字符串的输入参数不匹配导致的报错。这时可以按照参考资料中所述的方法,逐一检查输入格式字符串和输入参数是否对应,修改为正确的格式,从而实现对所有元素的修改。

    值得一提的是,对于数组中的每个元素进行操作,指针运算是非常方便和高效的方法。例如,可以使用*(p+i)的方式逐个输出和修改数组元素的值,其中指针加i的操作就相当于把指针从数组首元素p移动i个位置,即指向第i+1个元素。在这个过程中,由于指针指向的是数组首元素,所以指针加i之后就相当于指向了数组中的每个元素,因此可以方便地对每个元素进行操作。