#include
#include
int main(void)
{
struct stu{
int num;
char*name;
char sex;
float score;
}boy1,boy2;
printf("please input ID and name\n");
scanf("%d%s",&boy1.num,boy1.name);
printf("input sex and score\n");
scanf("%c %f",&boy1.sex,boy1.score);
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
system("PAUSE");
return 0;
}
详细地说一下这个代码有什么问题。谢谢
(1)结构体的name没有分配内存
(2)读取成绩的时候漏写了&
(3)读取性别前,需要用getchar()吸收一下上一次输入的回车符
代码修改如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct stu {
int num;
char* name;
char sex;
float score;
}boy1, boy2;
boy1.name = (char*)malloc(20); //申请内存空间
printf("please input ID and name\n");
scanf("%d%s", &boy1.num, boy1.name);
getchar(); //吸收回车符
printf("input sex and score\n");
scanf("%c %f", &boy1.sex, &boy1.score); //boy1.score前面加&
boy2 = boy1;
printf("Number=%d\nName=%s\n", boy2.num, boy2.name);
printf("Sex=%c\nScore=%f\n", boy2.sex, boy2.score);
system("PAUSE");
return 0;
}
char*name; 改成 char name[20]这样子,你没有给name分配空间,所以scanf输入时会崩溃掉的
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct stu{
int num;
char name[20]; //name定义为字符数组,需要分配空间才行
char sex;
float score;
}boy1,boy2;
printf("please input ID and name\n");
scanf("%d%s",&boy1.num,boy1.name);
getchar(); //要加这一句,否则sex接收的是换行符
printf("input sex and score\n");
scanf("%c %f",&boy1.sex,&boy1.score); //score前面也要加&
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
system("PAUSE");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!