鱼C论坛

 找回密码
 立即注册
查看: 1086|回复: 11

[已解决]结构体数组不能使用变量

[复制链接]
发表于 2022-6-3 13:50:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
https://fishc.com.cn/forum.php?m ... peid%26typeid%3D570
动动手第1题

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

请问如何解决,谢谢。
最佳答案
2022-6-3 16:41:06
本帖最后由 jackz007 于 2022-6-3 16:52 编辑
dfsldfsl 发表于 2022-6-3 14:53
麻烦再帮忙看一下
scanf_s("%d", &pu.id); 划线提示正在从pu读取无效数据

  1.        scanf_s("%s", pu[i] . email)         ;
  2. . . . . . .
  3.        scanf_s("%s", pu[i] . qq)            ;
复制代码

        改为:
  1.        scanf_s("%s", pu[i] . email , 50)         ;
  2. . . . . . .
  3.        scanf_s("%s", pu[i] . qq , 20)            ;
复制代码


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

  3. struct Student {
  4.     int id         ;
  5.     int sex        ;
  6.     char email[50] ;
  7.     char qq[20]    ;
  8. } stu ;

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

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

  19.        printf("请输入id :")                     ;
  20.        scanf_s("%d" , & pu[i] . id)              ;

  21.        printf("请输入性别:")                    ;
  22.        scanf_s("%d", & pu[i] . sex)              ;

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

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

  29.    printf("\n以下是录入的所有男生的数据:\n");
  30.    for (i = 0; i < n; i++)
  31.    {
  32.        if (pu[i].sex == 1)
  33.        {
  34.            printf("ID:%d\n", pu[i].id);
  35.            printf("QQ号是:%s\n", pu[i].qq);
  36.            printf("Email是:%s\n", pu[i].email);
  37.        }
  38.    }
  39.    printf("\n以下是录入的所有女生的数据:\n");
  40.    for (i = 0; i < n; i++)
  41.    {
  42.        if (pu[i].sex == 0)
  43.        {
  44.            printf("ID:%d\n", pu[i].id);
  45.            printf("QQ号是:%s\n", pu[i].qq);
  46.            printf("Email是:%s\n", pu[i].email);
  47.        }
  48.    }
  49.    free(pu);
  50.    return 0;
  51. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-3 14:03:33 | 显示全部楼层
用动态内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-3 14:19:32 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct FOO {
  4.         char name[64]     ;
  5.         int age           ;
  6.         char sex          ;
  7.         struct FOO * next ;
  8. } Student                 ;

  9. int main(void)
  10. {
  11.         int n             ;
  12.         Student * p       ;
  13.         scanf("%d" , & n) ;
  14.         if(n > 0) {
  15.                 if((p = (Student *) malloc(sizeof(Student) * n))) {
  16.                         printf("succsess : malloc()\n")          ;
  17.                         free(p)                                  ;
  18.                 } else {
  19.                         fprintf(stderr , "failure : malloc()\n") ;
  20.                 }
  21.         }        
  22. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-3 14:28:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-3 14:29:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-3 14:53:35 | 显示全部楼层

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

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

谢谢。


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


  3. struct Student {
  4.     int id;
  5.     int sex;
  6.     char email[50];
  7.     char qq[20];

  8. }stu;

  9. int main(void)
  10. {
  11.     int n, i;

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

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

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

  19.        printf("请输入id:");
  20.        scanf_s("%d", &pu[i].id);

  21.        printf("请输入性别:");
  22.        scanf_s("%d", &pu[i].sex);

  23.        printf("请输入邮箱:");
  24.        scanf_s("%s", pu[i].email);

  25.        printf("请输入qq:");
  26.        scanf_s("%s", pu[i].qq);
  27.    }
  28.    printf("\n=====数据录入完毕=====\n");

  29.    printf("\n以下是录入的所有男生的数据:\n");
  30.    for (i = 0; i < n; i++)
  31.    {
  32.        if (pu[i].sex == 1)
  33.        {
  34.            printf("ID:%d\n", pu[i].id);
  35.            printf("QQ号是:%s\n", pu[i].qq);
  36.            printf("Email是:%s\n", pu[i].email);
  37.        }
  38.    }

  39.    printf("\n以下是录入的所有女生的数据:\n");
  40.    for (i = 0; i < n; i++)
  41.    {
  42.        if (pu[i].sex == 0)
  43.        {
  44.            printf("ID:%d\n", pu[i].id);
  45.            printf("QQ号是:%s\n", pu[i].qq);
  46.            printf("Email是:%s\n", pu[i].email);
  47.        }
  48.    }



  49.    free(pu);


  50.     return 0;
  51. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-3 16:41:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-6-3 16:52 编辑
dfsldfsl 发表于 2022-6-3 14:53
麻烦再帮忙看一下
scanf_s("%d", &pu.id); 划线提示正在从pu读取无效数据

  1.        scanf_s("%s", pu[i] . email)         ;
  2. . . . . . .
  3.        scanf_s("%s", pu[i] . qq)            ;
复制代码

        改为:
  1.        scanf_s("%s", pu[i] . email , 50)         ;
  2. . . . . . .
  3.        scanf_s("%s", pu[i] . qq , 20)            ;
复制代码


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

  3. struct Student {
  4.     int id         ;
  5.     int sex        ;
  6.     char email[50] ;
  7.     char qq[20]    ;
  8. } stu ;

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

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

  19.        printf("请输入id :")                     ;
  20.        scanf_s("%d" , & pu[i] . id)              ;

  21.        printf("请输入性别:")                    ;
  22.        scanf_s("%d", & pu[i] . sex)              ;

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

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

  29.    printf("\n以下是录入的所有男生的数据:\n");
  30.    for (i = 0; i < n; i++)
  31.    {
  32.        if (pu[i].sex == 1)
  33.        {
  34.            printf("ID:%d\n", pu[i].id);
  35.            printf("QQ号是:%s\n", pu[i].qq);
  36.            printf("Email是:%s\n", pu[i].email);
  37.        }
  38.    }
  39.    printf("\n以下是录入的所有女生的数据:\n");
  40.    for (i = 0; i < n; i++)
  41.    {
  42.        if (pu[i].sex == 0)
  43.        {
  44.            printf("ID:%d\n", pu[i].id);
  45.            printf("QQ号是:%s\n", pu[i].qq);
  46.            printf("Email是:%s\n", pu[i].email);
  47.        }
  48.    }
  49.    free(pu);
  50.    return 0;
  51. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-3 20:47:40 | 显示全部楼层

谢谢 明白了 要指定尺寸
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-4 06:43:45 From FishC Mobile | 显示全部楼层
把设定尺寸define N 3在全局,行不?后面提示用户输入长度或者用默认3长度。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-24 20:09:55 | 显示全部楼层
简单粗暴:用C++
C是不支持用变量开数组的
把所有源文件后缀名改.cpp就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-14 20:14:58 | 显示全部楼层
C不支持变量长度的数组,但C++支持。
可以考虑将后缀改为.cpp后运行,再根据bug(如果有)更换#include的头文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

请不要翻帖(这是2个月前的帖子了)回答没有意义了,应该尽快确认最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表