c - 正确使用结构和指针

标签 c struct scanf

我必须声明一个“struct”类型的 vector ,对于每 n 个学生,它为学生所属的组(就像一个计数器)、他们的姓名和成绩创建一个值。

程序必须输出这些组中成绩最高的学生的姓名。我必须在堆上分配 vector (我只知道堆的理论解释,但我不知道如何应用它)并且我必须使用指针遍历 vector 。

例如,如果我给 n 取值 4,将有 4 个学生,程序将输出最高成绩及其姓名,如 here 所示。 .

这将输出 Ana 10 和 Eva 10。

我试了一下,但我不知道如何扩展或修复它,所以我很感激我能得到的所有帮助,如果可能的话,我会得到关于堆和指针在这类问题中的实际应用的解释。

#include <stdio.h>
#include <stdlib.h>

struct students {
    int group;
    char name[20];
    int grade;
};

int main()
{
    int v[100], n, i;
    scanf("%d", n);
    for (i = 0; i < n; i++) {
          v[i].group = i;
          scanf("%s", v[i].name);
          scanf("%d", v[i].grade);
    }
    for (i = 0; i < n; i++) {
          printf("%d", v[i].group);
          printf("%s", v[i].name);
          printf("%d", v[i].grade);
    }
    return 0;
}

我只是想创建 vector ,但没有任何效果..

最佳答案

看来,int v[100]; 并不是您想要的。删除它。

您可以采用以下两种方式之一。

  • Use a VLA .从用户扫描n的值后,定义数组如struct students v[n];并继续。

  • 定义一个固定大小的数组,如struct students v[100];,并使用大小来限制循环条件。

也就是说,

  • scanf("%d", n); 应为 scanf("%d", &n);,如 %d需要一个指向 scanf() 的整数类型参数的指针。其他情况也一样。
  • scanf("%s", v[i].name); 最好是 scanf("%19s", v[i].name);避免因输入过长而导致缓冲区溢出的可能性。

关于c - 正确使用结构和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41234426/

相关文章:

c# - 使用反射获取结构中的结构

c - 将递归定义的结构转换为 C 接口(interface)的 Julia

C动态分配结构,使用scanf时出现段错误

c - 如何使用文件大小来读取 WinAPI 中的文件?

c++ - 静态链接 C++ 和 C 库时的 undefined reference

c - 函数调用后变量值发生变化,未被使用

c - 打印前执行的扫描语句

c - 在使用 float 以外的其他类型进行编码时,是否应该使用 '>=' 而不是 '==' 来更加安全?

go - 仅导出由嵌入式结构实现的方法子集

c - 按 enter 时 scanf 不返回