结构体数组不能使用变量
https://fishc.com.cn/forum.php?mod=viewthread&tid=83930&extra=page%3D2%26filter%3Dtypeid%26typeid%3D570动动手第1题
根据用户输入大小定义结构体数组大小
struct Student stu;
在vs2022中,提示,表达式必须包含常量
请问如何解决,谢谢。 用动态内存 #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") ;
}
}
} 风车呼呼呼 发表于 2022-6-3 14:03
用动态内存
谢谢 jackz007 发表于 2022-6-3 14:19
谢谢 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: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;
} jackz007 发表于 2022-6-3 16:41
改为:
谢谢 明白了 要指定尺寸 把设定尺寸define N 3在全局,行不?后面提示用户输入长度或者用默认3长度。 简单粗暴:用C++
C是不支持用变量开数组的
把所有源文件后缀名改.cpp就行 C不支持变量长度的数组,但C++支持。
可以考虑将后缀改为.cpp后运行,再根据bug(如果有)更换#include的头文件 ExiaGN001 发表于 2022-8-14 20:14
C不支持变量长度的数组,但C++支持。
可以考虑将后缀改为.cpp后运行,再根据bug(如果有)更换#include的头 ...
请不要翻帖(这是2个月前的帖子了)回答没有意义了,应该尽快确认最佳答案
页:
[1]