dfsldfsl 发表于 2022-6-3 13:50:49

结构体数组不能使用变量

https://fishc.com.cn/forum.php?mod=viewthread&tid=83930&extra=page%3D2%26filter%3Dtypeid%26typeid%3D570
动动手第1题

根据用户输入大小定义结构体数组大小
struct Student stu;
在vs2022中,提示,表达式必须包含常量

请问如何解决,谢谢。

风车呼呼呼 发表于 2022-6-3 14:03:33

用动态内存

jackz007 发表于 2022-6-3 14:19:32

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

typedef struct FOO {
      char name   ;
      int age         ;
      char sex          ;
      struct FOO * next ;
} Student               ;

int main(void)
{
      int n             ;
      Student * p       ;
      scanf("%d" , & n) ;
      if(n > 0) {
                if((p = (Student *) malloc(sizeof(Student) * n))) {
                        printf("succsess : malloc()\n")          ;
                        free(p)                                  ;
                } else {
                        fprintf(stderr , "failure : malloc()\n") ;
                }
      }      
}

dfsldfsl 发表于 2022-6-3 14:28:22

风车呼呼呼 发表于 2022-6-3 14:03
用动态内存

谢谢

dfsldfsl 发表于 2022-6-3 14:29:22

jackz007 发表于 2022-6-3 14:19


谢谢

dfsldfsl 发表于 2022-6-3 14:53:35

jackz007 发表于 2022-6-3 14:19


麻烦再帮忙看一下
scanf_s("%d", &pu.id); 划线提示正在从pu读取无效数据

scanf_s("%s", pu.email); 划线提醒缺少整形参数

谢谢。


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


struct Student {
    int id;
    int sex;
    char email;
    char qq;

}stu;

int main(void)
{
    int n, i;

    printf("输入一个数字:");
    scanf_s("%d", &n);

    struct Student* pu = &stu;
   pu = (Student*)malloc(n * sizeof(Student));

   for (i = 0; i < n; i++)
   {
       printf("请输入第%d和学生的信息\n", i + 1);

       printf("请输入id:");
       scanf_s("%d", &pu.id);

       printf("请输入性别:");
       scanf_s("%d", &pu.sex);

       printf("请输入邮箱:");
       scanf_s("%s", pu.email);

       printf("请输入qq:");
       scanf_s("%s", pu.qq);
   }
   printf("\n=====数据录入完毕=====\n");

   printf("\n以下是录入的所有男生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu.sex == 1)
       {
         printf("ID:%d\n", pu.id);
         printf("QQ号是:%s\n", pu.qq);
         printf("Email是:%s\n", pu.email);
       }
   }

   printf("\n以下是录入的所有女生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu.sex == 0)
       {
         printf("ID:%d\n", pu.id);
         printf("QQ号是:%s\n", pu.qq);
         printf("Email是:%s\n", pu.email);
       }
   }



   free(pu);


    return 0;
}

jackz007 发表于 2022-6-3 16:41:06

本帖最后由 jackz007 于 2022-6-3 16:52 编辑

dfsldfsl 发表于 2022-6-3 14:53
麻烦再帮忙看一下
scanf_s("%d", &pu.id); 划线提示正在从pu读取无效数据



       scanf_s("%s", pu . email)         ;
. . . . . .
       scanf_s("%s", pu . qq)            ;
      改为:
       scanf_s("%s", pu . email , 50)         ;
. . . . . .
       scanf_s("%s", pu . qq , 20)            ;

       修改后的代码:
#include <stdio.h>
#include <stdlib.h>

struct Student {
    int id         ;
    int sex      ;
    char email ;
    char qq    ;
} stu ;

int main(void)
{
    int n , i                  ;
    printf("输入一个数字:")   ;
    scanf_s("%d" , &n)         ;
    struct Student * pu = &stu   ;
    pu = (struct Student *) malloc(n * sizeof(struct Student)) ; //【修改1】

    for (i = 0; i < n; i++)
    {
       printf("请输入第%d个学生的信息\n", i + 1) ;

       printf("请输入id :")                     ;
       scanf_s("%d" , & pu . id)            ;

       printf("请输入性别:")                  ;
       scanf_s("%d", & pu . sex)            ;

       printf("请输入邮箱:");
       scanf_s("%s", pu . email , 50)         ; //【修改2】

       printf("请输入qq:")                      ;
       scanf_s("%s", pu . qq , 20)            ; //【修改3】
   }
   printf("\n=====数据录入完毕=====\n");

   printf("\n以下是录入的所有男生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu.sex == 1)
       {
         printf("ID:%d\n", pu.id);
         printf("QQ号是:%s\n", pu.qq);
         printf("Email是:%s\n", pu.email);
       }
   }
   printf("\n以下是录入的所有女生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu.sex == 0)
       {
         printf("ID:%d\n", pu.id);
         printf("QQ号是:%s\n", pu.qq);
         printf("Email是:%s\n", pu.email);
       }
   }
   free(pu);
   return 0;
}

dfsldfsl 发表于 2022-6-3 20:47:40

jackz007 发表于 2022-6-3 16:41
改为:




谢谢 明白了 要指定尺寸

nikeweiyi 发表于 2022-6-4 06:43:45

把设定尺寸define N 3在全局,行不?后面提示用户输入长度或者用默认3长度。

ExiaGN001 发表于 2022-6-24 20:09:55

简单粗暴:用C++
C是不支持用变量开数组的
把所有源文件后缀名改.cpp就行

ExiaGN001 发表于 2022-8-14 20:14:58

C不支持变量长度的数组,但C++支持。
可以考虑将后缀改为.cpp后运行,再根据bug(如果有)更换#include的头文件

liuzhengyuan 发表于 2022-8-14 23:25:11

ExiaGN001 发表于 2022-8-14 20:14
C不支持变量长度的数组,但C++支持。
可以考虑将后缀改为.cpp后运行,再根据bug(如果有)更换#include的头 ...

请不要翻帖(这是2个月前的帖子了)回答没有意义了,应该尽快确认最佳答案
页: [1]
查看完整版本: 结构体数组不能使用变量