练习是:输入一些角色的信息,然后再打印出来。遇到的问题有两个:
1)结构体内字符串部分如果用指针定义,用scanf赋值就会崩溃报错。用确定的字符串正常;
2)按照正常的思路写完之后,在运行窗口输入信息时,就会出现如下画面,试了很多,好像是输入第六个信息之后,scanf发现没得赋值了才开始下一轮循环。不知该如何科学解决。
for (short i = 0; i < 3; i++)
{
printf("第%d个角色:\n",i + 1);
scanf_s("%s\t%s\t%d\t%d\t%d\n",
(pbody + i)->name, sizeof((pbody + i)->name), (pbody + i)->pro, sizeof((pbody + i)->pro),
&(pbody + i)->blood, &(pbody + i)->attack, &(pbody + i)->defense);
}
这是我把能想到的解决办法了,但是感觉不美观,还请走过路过的大神支个招
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char name[10];
char pro[10];
int blood;
int attack;
int defense;
}Hero;
void main()
{
Hero body[3];
Hero* pbody = &body[0];
printf("第1个角色:\n");
for (short i = 0; i < 3; i++)
{
//scanf_s("%s\t%s\t%d\t%d\t%d\n",
// (pbody + i)->name, sizeof((pbody + i)->name), (pbody + i)->pro, sizeof((pbody + i)->pro),
// &(pbody + i)->blood, &(pbody + i)->attack, &(pbody + i)->defense);
scanf_s("%s\t", (pbody + i)->name, sizeof((pbody + i)->name));
scanf_s("%s\t", (pbody + i)->pro, sizeof((pbody + i)->pro));
scanf_s("%d\t", &(pbody + i)->blood);
scanf_s("%d\t", &(pbody + i)->attack);
printf("第%d个角色:\n", i + 2);
scanf_s("%d\n", &(pbody + i)->defense);
}
//char* name;
//pbody->name = (char*)malloc(sizeof(char));
//char* pro;
//pbody->pro = (char*)malloc(sizeof(char));
for (short i = 0; i < 3; i++)
{
printf("姓名:%s\t职业:%s\t血量:%d\t攻击:%d\t防御:%d\n",
(pbody + i)->name, (pbody + i)->pro, (pbody + i)->blood, (pbody + i)->attack, (pbody + i)->defense);
}
//scanHeroInfo(Hero* pbody, 3);
//printHeroInfo(Hero* pbody, 3);
}