鱼C论坛

 找回密码
 立即注册
查看: 1302|回复: 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读取无效数据

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

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

struct Student {
    int id         ;
    int sex        ;
    char email[50] ;
    char qq[20]    ;
} 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[i] . id)              ;

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

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

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

   printf("\n以下是录入的所有男生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu[i].sex == 1)
       {
           printf("ID:%d\n", pu[i].id);
           printf("QQ号是:%s\n", pu[i].qq);
           printf("Email是:%s\n", pu[i].email);
       }
   }
   printf("\n以下是录入的所有女生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu[i].sex == 0)
       {
           printf("ID:%d\n", pu[i].id);
           printf("QQ号是:%s\n", pu[i].qq);
           printf("Email是:%s\n", pu[i].email);
       }
   }
   free(pu);
   return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

typedef struct FOO {
        char name[64]     ;
        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") ;
                }
        }        
}
想知道小甲鱼最近在做啥?请访问 -> 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[i].id); 划线提示正在从pu读取无效数据

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

谢谢。

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


struct Student {
    int id;
    int sex;
    char email[50];
    char qq[20];

}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[i].id);

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

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

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

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

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



   free(pu);


    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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读取无效数据

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

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

struct Student {
    int id         ;
    int sex        ;
    char email[50] ;
    char qq[20]    ;
} 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[i] . id)              ;

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

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

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

   printf("\n以下是录入的所有男生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu[i].sex == 1)
       {
           printf("ID:%d\n", pu[i].id);
           printf("QQ号是:%s\n", pu[i].qq);
           printf("Email是:%s\n", pu[i].email);
       }
   }
   printf("\n以下是录入的所有女生的数据:\n");
   for (i = 0; i < n; i++)
   {
       if (pu[i].sex == 0)
       {
           printf("ID:%d\n", pu[i].id);
           printf("QQ号是:%s\n", pu[i].qq);
           printf("Email是:%s\n", pu[i].email);
       }
   }
   free(pu);
   return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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, 2025-1-13 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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